2017-05-21 4 views
0

基本的には、プログラムの一部でwhileループの問題が発生しています。Whileループはstrcmp if文の影響を受けます。どうしてこれなの?

  char *nameOfTheCommand; 
      char *arrayArgs[500]; 
      //track for redirection. If set, gives position of the file name. Else it equals zero 
      int redirectionCheck=0; 
      arrayArgs[0]=token; 
      int i; 
      i=0; 
      //While still arguements to take in, do this 
      while(arrayArgs[i]!=NULL) 
      { 
       i++; 
       arrayArgs[i]=strtok(NULL, " \n"); 
       if(strcmp(arrayArgs[i], "<")==0) 
       { 
        redirectionCheck=i; 
       } 
      } 

私は、コードがしたいすべてがstrtokはループスルーがあり、それは等しい[i]をarrayArgsに設定します。ここで私はとの問題を抱えているコードのセクションです。 strtokが "<"シンボルを引き出すと、リダイレクトをiに設定します。

これは簡単なようです。しかし、if文をwhileループに含めると、whileループが終了し、実行後にコードがないように見えます。 whileループの後にprintf文を置くと、何も印刷されません。それは、whileループのようなものであることがわかっているので、すぐ後に実行されるすべてのものが停止します。

ただし、if文を含めないと、コードがうまく動作します。

誰かが私のwhileループが正しく動作しない原因と思われる理由を説明していただけますか?のように、whileループは、それを含めると、後のものを実行しないようです。あらゆる情報をありがとう。

+3

デバッガでトレースしますか? strtokが失敗し、strcmpにヌルポインタを渡すとどうなりますか? –

+0

if(strcmp(arrayArgs [i]、<")== 0){redirectionCheck = i; } '' while'ループの始め、 'i ++'の前にありますか? –

+0

いいえ、arrayArgs [0]が事前にトークンに設定されているためです。私はarrayArgs [1]以降を設定していて、意図的にarrayArgs [0]をスキップしています。 – user7977797

答えて

1

ループの最後の反復では、NULLstrcmpに渡します。

i = 1; 
// read subsequent tokens 
while((arrayArgs[i] = strtok(NULL, " \n")) != NULL) 
{ 
    if(strcmp(arrayArgs[i], "<") == 0) 
    { 
     redirectionCheck = i; 
    } 
    i++; 
} 

私もiの値のチェックを追加します。これは、ループを再配置することで回避することができます。

関連する問題