0

我必须执行 hist 命令,包括 !k 和 !!

2个功能:

void addInHistory(char **history,char *command,int *list_size,int history_capacity)
{
int index=*(list_size);
  if(command[0]!='\n') 
  {
     if(index==history_capacity-1)
     {
        printf("History is full.Deleting commands.");
     }
     else 
     {
         char current_command[COMMAND_SIZE];
         strcpy(current_command,command);
         history[index++]=current_command;       
     }
  }
}
 void printHistory(char **history,int size) 
{
int i;
  for(int i=0;i<=size;i++)
  {
    printf("%d. %s\n",i+1,history[i]);
  }
}

任何帮助,将不胜感激。

4

3 回答 3

0

这是链接列表的一个很好示例的链接http://www.thegeekstuff.com/2012/08/c-linked-list-example/

您只需将 int val 替换为您的 char*。但是如果您修复一行代码,您的方法将起作用

你的错误就在这里

     char current_command[COMMAND_SIZE];

在 else 语句结束后 current_command 超出范围并因此被删除。而是这样做

     char * current_command = new char[COMMAND_SIZE];

那么你的代码应该可以工作

于 2013-11-09T16:53:48.643 回答
0

对于 C 解决方案

 char current_command[COMMAND_SIZE];
 strcpy(current_command,command);
 history[index++]=current_command;       

应该

history[index++]= strdup(command);       

完成后一定要释放它。

于 2013-11-09T17:01:54.133 回答
0

您可能想使用(像bash这样)GNU readline库。然后,您将使用readline函数从终端交互式读取一行,并使用 add_history将一行添加到历史列表(您还可以自定义自动补全)

于 2015-12-29T13:02:33.670 回答