我想做的是在我的shell程序中开发一个history命令。因此,每当用户写入历史记录时,输入的最后 10 个命令都会显示在屏幕上
这是我的代码段。
int i;
char cmd[4096];
int cmdHisC =0;
char *cmdHistory;
char *cmdsHistory[10];
while(1) {
/*** Read input from shell ***/
fgets(cmd,4096,stdin);
if(strcmp(cmd,"") != 0)
{
if((cmdHistory= strdup(cmd)) != NULL)
{
if (cmdsHistory[cmdHisC] != NULL)
free(cmdsHistory[cmdHisC]);
cmdsHistory[cmdHisC] = cmdHistory;
cmdHisC++;
}
else
fprintf(stderr, "Error, Cannot save this command in the history pointer: Out of memoryn");
if(cmdHisC>9)
cmdHisC=0;
}
打印历史记录我的意思是cmdsHistory,这是代码:
if(strcmp(argsCmd[0], "history")==0)
{
for(int n = 0; n<10 ; n++)
{
if(cmdsHistory[n] != NULL)
printf("History command %d: %sn", n, cmdsHistory[n]);
}
}
然后,每当用户写入历史记录时,我都会遍历cmds历史记录并打印结果。
我无法将 *cmdHistory(用户输入的 sets 命令)放入 **cmdsHistory 数组的问题。
请帮忙吗?
一个修复程序是改变
char **cmdsHistory;
自
char *cmdsHistory[10]; //or any desire number/macro
但是,您的程序仍然会通过调用strdup
并在一个循环后重置i as 0
来泄漏内存。不过请修复它。
修复泄漏就像
if (cmdsHistory[cmdHisC]) {
free(cmdsHistory[cmdHisC]);
cmdsHistory[cmdHisC] = cmdHistory;
}
确保初始化所有指针以在启动时NULL
。