while循环受strcmp if语句的影响。为什么是这样?

时间:2017-05-21 22:27:03

标签: c

基本上,我在程序的一部分中遇到了下面的while循环问题。以下是我遇到的代码部分:

            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并将其设置为arrayArgs [i]。如果strtok碰巧拉出“&lt;”符号,然后我想重定向设置为我。

这看起来很简单。然而,如果我在while循环中包含if语句,似乎while循环退出并且在执行之后没有代码。我在while循环之后放了一个printf语句,它不会打印任何东西,这就是我知道它就像while循环只是阻止其后的所有其他运行。

然而,如果我不包含if语句,我的代码运行正常。

有人可以向我解释为什么这个判断似乎导致我的while循环不能正确行动?如果我包含它,似乎while循环不会执行它之后的东西。感谢您提供任何信息。

1 个答案:

答案 0 :(得分:1)

在循环的最后一次迭代中,您将NULL传递给strcmp。重新排列循环可以避免这种情况:

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

但我还要检查i的值。