2013-10-07 113 views
0

我的代碼假設循環執行一個命令,然後執行命令,直到命令退出。當它運行時,我得到一個永無止境的循環。循環查詢命令

void run(){ 
    char command[100][100], *p; 
    int numOfArgs; 
    while(1){ 
     p=&command[0][0]; 
     numOfArgs = 0; 
     while(getchar()!= '\n'){ 
      while(getchar()!= ' '){ 
       *p=getchar(); 
       p++; //increased to next char in string 
      } 
      *p='\0'; 
      numOfArgs++; //increases number of strings 
      p=&command[numOfArgs][0]; //References p to location 0 of next string 
     } 
     if(strcmp(command[0], "/*command*/") == 0){ 
      //Do command 
     } 

     if(strcmp(command[0], "exit") == 0) 
      return; 

     else printf("Not a valid command"); 
    } 
} 
+0

注意:除了'command [0]'之外,你永遠不會看任何東西,而且你也從來沒有改變過它。 – crashmstr

+1

爲什麼你要逐個字符地使用命令而不是使用'scanf'? –

+0

&command [0] [0]是一個非常奇怪的語法(雖然正確)。爲什麼不使用簡單的命令[0]呢? – fayyazkl

回答

3

變更線13

p=&command[numOfArgs][0]; 

你也需要\0終止你的命令。

+0

我相信我已經更新了代碼,在每個單詞的末尾添加\ 0。 – confusedProgrammer

0

已經指出了實際的問題,即沒有終止空值,即「\ 0」。但只是闡述發生了什麼。

由於您正在使用char而不是sprintf來輸入char,或者得到等等,您的命令[index]不會以null結束。

由於沒有終止空,判斷strcmp,永遠不會終止在合適的比較,而是保持比較直到null被發現。因此它總是導致不匹配並繼續循環。