[英]while loop conditional never evaluates true when comparing to “>”
我正在使用while循环来检测数组中是否存在“>”符号。 循环条件永远不会计算为true。 当我显示数组的内容时,“>”符号就在那里。 在我的代码中,这不是第一次调用strtok。 这也只是总代码的一小部分。 由strtok分解的字符串是“ls> testfile.txt”。 任何帮助,将不胜感激。
while (userArgs[k] != ">") {
k++;
userArgs[k] = strtok(NULL, " ");
if(userArgs[k] == ">") {
break;
}
if (userArgs[k] == NULL){
break;
}
}
strtok
返回一个char *
所以我想你正在尝试比较字符串。
您不能比较C中的字符串,使用strcmp
。 你现在正在做的是比较地址,绝对不是你想要的。
使用'>'
代替">"
。 第一个是字符,第二个是字符串 - 或者实际上是指向字符的指针,并且清楚地比较指针并不是你想要的。
如果userArgs是char
类型,那么你正在比较字符串和字符常量while (userArgs[k] != ">")
和if(userArgs[k] == ">")
那么实际上字符串的地址是将二进制程序文件与字符值进行比较。 请注意, ">"
是一个字符串常量,由存储字符串的某个地址表示'>'
是一个字符常量并且具有值。
如果userArgs
是char *
那么您将比较程序堆栈或堆中的userArgs[i]
位置的地址(如果动态分配)与存储在程序二进制文件中的">"
字符串的地址,并由内存中的OS加载。 这些内存位置会不时变化,与其内容无关。 比较你必须使用的存储器的内容 while (strcmp (userArgs[k], ">") != 0)
。 或者为了避免调用strcmp
你可能想要执行以下操作while ((userArgs[k][0] != '>') && (userArgs[k][1] == '\\0')
以上示例需要根据您的需要进行更改。
您正在比较地址userArgs [k]是否与“<”的堆栈地址相同。 情况永远不会如此。 你需要匹配userArgs[k][0] == '>' // note the single quote.
但如果'>'前面没有空格,那就错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.