while循环条件从未与“>”进行比较时评估为true

时间:2011-05-09 06:38:19

标签: c conditional while-loop

我正在使用while循环来检测“>”的存在数组中的符号。循环条件永远不会计算为true。当我显示数组的内容时,“>”符号就在那里。在我的代码中,这不是第一次调用strtok。这也只是总代码的一小部分。由strtok分解的字符串是“ls> testfile.txt”。任何帮助将不胜感激。

while (userArgs[k] != ">") {

    k++;

    userArgs[k] = strtok(NULL, " ");
    if(userArgs[k] == ">") {
        break;

    }
    if (userArgs[k] == NULL){
        break;
    }
}

4 个答案:

答案 0 :(得分:2)

strtok会返回char *,所以我猜您正在尝试比较字符串。

您无法比较C中的字符串,请使用strcmp。你现在正在做的是比较地址,绝对不是你想要的。

答案 1 :(得分:1)

使用'>'代替">"。第一个是字符,第二个是字符串 - 或者实际上是指向字符的指针,并且清楚地比较指针并不是你想要的。

答案 2 :(得分:1)

如果userArgs的类型为char,那么您要将字符串与字符常量while (userArgs[k] != ">")if(userArgs[k] == ">")进行比较。实际上,二进制程序文件中字符串的地址与人物价值。请注意,">"是一个字符串常量,由存储字符串的某个地址表示'>'是一个字符常量并且具有值。

如果userArgschar *,那么您要将程序堆栈或堆中的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.,但如果'>'则错误之前没有空格。