2011-07-28 70 views
0

我一直在努力解決這個問題,我想知道如果有人能找到我做錯了什麼。即時通訊從標準輸入讀取用戶輸入,分解他們通過strtok()輸入的字符串,並將其存儲到char *的數組中。 char *的數組是在while循環之外定義的。while循環清除我的數組? (C)

因此:用戶通過stdin鍵入輸入,並且數組中充滿了來自命令的每個單詞的字符串。

事情是,如果用戶只是命中輸入我想數組保持它的價值!我想要相同的值留在數組中...所以我可以重新執行相同的命令。看起來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的檢查1,檢查2,檢查3所有打印什麼,如果用戶點擊進入。在他們最後輸入「步驟」的情況下,我想要「步驟」留在數組中,從而再次執行!

+0

作業.......? –

+0

你是什麼意思?這是我正在上課的一個項目。就我所做的嘗試解決問題而言,我實際上有一個嘗試的機制來阻止已經存在於代碼中的這種現象......但它並不按照我希望的方式工作。 – Phil

回答

2

您正在用指向stuff數組的指針填充命令數組。該數組每次都被fgets覆蓋(可能會將第一個字符替換爲null)。您需要複製數據以保留它。

+0

'strdup'將是一個很好的函數來複制字符串數據。只要記住當你完成它們時'釋放'字符串指針。 –