基本上,我在程序的一部分中遇到了下面的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循环不会执行它之后的东西。感谢您提供任何信息。
答案 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
的值。