我想要做的是在我的shell程序中开发一个历史命令。因此,每当用户写入历史记录时,输入的最后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 memory\n");
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: %s\n", n, cmdsHistory[n]);
}
}
然后,每当用户写入历史记录时,我将遍历cmdsHistory并打印结果。
我无法将* cmdHistory(用户输入的sets命令)转换为** cmdsHistory数组的问题。
请帮忙吗?
答案 0 :(得分:1)
一个修复就是改变
char **cmdsHistory;
到
char *cmdsHistory[10]; //or any desire number/macro
但是你的程序仍会泄漏内存,通过调用strdup
并在一个周期后重置i as 0
。请修理它。
修复泄漏就像
if (cmdsHistory[cmdHisC]) {
free(cmdsHistory[cmdHisC]);
cmdsHistory[cmdHisC] = cmdHistory;
}
确保在启动时初始化所有指向NULL
的指针。