0

!k と !! を含む hist コマンドを実装する必要があります。

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* に置き換えるだけです。ただし、コードを1行修正すると、メソッドが機能します

あなたのバグはここにあります

     char current_command[COMMAND_SIZE];

current_command は、else ステートメントが終了した後にスコープ外になり、削除されます。代わりにこれを行う

     char * current_command = new char[COMMAND_SIZE];

次に、コードが機能するはずです

于 2013-11-09T16:53:48.643 に答える
0

GNU readlineライブラリを使用したい場合があります (そうですbash) 。次に、 readline関数を使用して端末から対話的に行を読み取り、 add_historyを使用して履歴リストに行を追加します (また、オートコンプリートをカスタマイズすることもできます) 。

于 2015-12-29T13:02:33.670 に答える
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 に答える