2011-07-28 5 views
0

私はこの問題を少し難しくしています。誰かが間違っていることを誰かが見つけることができるのだろうかと思っています。 Stdinからユーザー入力を読み込み、strtok()で入力した文字列を分割し、char *の配列に格納します。 char *の配列は、whileループの外側で定義されています。ループ中にアレイがクリアされますか? (C)

したがって、ユーザーはstdinで入力を入力し、配列にはコマンドの各単語が含まれる文字列が入力されます。

ユーザーが入力を単に押すと、配列がMAINTAINの値になります。配列に同じ値を残しておきたいので、同じコマンドを再実行することができます。 whileループはchar *の配列を消去しているようです。コード例:

char *commands[3]; 
char *result = NULL; 
char delims[] = "  "; //a space AND a tab! 
while (1) { 

    printf(PROMPT); 

    //Gathers user input!   
    char *input; 
     char stuff[230]; 
     input = fgets(stuff, 230, stdin); 

    printf("input has length %i\n", strlen(input)); 
    int helper = strlen(input); 
    int i = 0; 

    result = strtok(input, delims); 
    printf("helper has length %i\n", helper); 
    printf("commands[0] CHECK 1:%s", commands[0]); 
    if (helper >1) 
    {   
     while(result != NULL) 
     { 
      printf("while gets hit!\n"); 
      if (i < 4) 
      {    
       commands[i] = result; 
        result = strtok(NULL, delims); 
       i++;  
      } 
     } 
    } 


    printf("commands[0] is CHECK 2:%s", commands[0]); 
    if (strncmp(commands[0], "step", 4) == 0) 
    { 
     lc3_step_one(p); 
    } 
    printf("commands[0] is CHECK 3:%s", commands[0]); 
}  

printfのCHECK 1、CHECK 2、およびCHECK 3は、ユーザーが入力すると何も表示されません。彼らが最後にタイプした「ステップ」の場合、私は「ステップ」を配列内に残して、再び実行されたい!

+0

宿題.......? –

+0

どういう意味ですか?私が取っているクラスのプロジェクトです。私が問題を解決しようとしてきた限り、私は実際にコード内のこの現象を止めるための試行されたメカニズムを実際に持っています...しかし、それは私が望む方法では機能しません。 – Phil

答えて

2

コマンド配列にstuff配列のポインタを入力します。その配列は、毎回fgetsによって上書きされています(おそらく最初の文字をnullに置き換えている)。データを保存するには、データをコピーする必要があります。

+0

'strdup'はで文字列データをコピーするのに適した関数です。あなたがそれらで終わったら、文字列ポインタを 'フリーにする 'ことを覚えておいてください。 –

関連する問題