我正在编写自己的 C Shell,但在实现某些东西来维护命令历史时遇到了麻烦。我想将它存储在一个带有整数和字符串的结构中(这样我就可以将命令及其在内存中的位置保存在一起),我只想存储 20 个元素。
我尝试使用其他人在此网站上提出的问题中的代码,但是当我编译它时,它只返回一个分段错误,所以我猜指针有问题。
这是我找到的与历史相关的所有代码:
char** cmdHistory; /* command history - no longer than 20 elements & null terminated */
int historySize = 0;
void addToHistory(char* newEntry) {
char** h;
int historySize = 0;
while (*cmdHistory != NULL)
if (sizeof(cmdHistory) == 20) {
char** newPtr = ++cmdHistory;
free(cmdHistory[0]);
cmdHistory = newPtr;
h = (char**)realloc(cmdHistory,20*sizeof(int));
cmdHistory = h;
cmdHistory[20] = newEntry;
} else {
h = (char**)realloc(cmdHistory,sizeof(int)+sizeof(cmdHistory));
cmdHistory = h;
cmdHistory[historySize] = newEntry;
++historySize;
}
}
void printHistory() {
char** currCmd = cmdHistory;
printf("\n\n");
while (*currCmd != NULL) {
printf("%s\n", *currCmd);
currCmd++;
}
printf("\n\n");
}
int main() {
cmdHistory[20] = NULL; /* null terminate the history */
}
我对 C 非常无用,因此非常感谢任何帮助。