繁体   English   中英

while循环条件从未在与“>”比较时计算为true

[英]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] == ">")那么实际上字符串的地址是将二进制程序文件与字符值进行比较。 请注意, ">"是一个字符串常量,由存储字符串的某个地址表示'>'是一个字符常量并且具有值。

如果userArgschar *那么您将比较程序堆栈或堆中的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM