我正在使用while循环来检测“>”的存在数组中的符号。循环条件永远不会计算为true。当我显示数组的内容时,“>”符号就在那里。在我的代码中,这不是第一次调用strtok。这也只是总代码的一小部分。由strtok分解的字符串是“ls> testfile.txt”。任何帮助将不胜感激。
while (userArgs[k] != ">") {
k++;
userArgs[k] = strtok(NULL, " ");
if(userArgs[k] == ">") {
break;
}
if (userArgs[k] == NULL){
break;
}
}
答案 0 :(得分:2)
strtok
会返回char *
,所以我猜您正在尝试比较字符串。
您无法比较C中的字符串,请使用strcmp
。你现在正在做的是比较地址,绝对不是你想要的。
答案 1 :(得分:1)
使用'>'
代替">"
。第一个是字符,第二个是字符串 - 或者实际上是指向字符的指针,并且清楚地比较指针并不是你想要的。
答案 2 :(得分:1)
如果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')
以上示例需要根据您的需要进行更改。
答案 3 :(得分:0)
您正在比较地址userArgs [k]是否与“<”的堆栈地址相同。情况永远不会如此。您需要匹配userArgs[k][0] == '>' // note the single quote.
,但如果'>'则错误之前没有空格。