【问题标题】:strcmp on char * compiles, but isn't workingchar * 上的 strcmp 编译,但不工作
【发布时间】:2013-11-14 21:32:00
【问题描述】:

我试图用空格分解一个 char,然后执行一些条件逻辑,但是在 char * 上使用 strcmp 不起作用。

int main(void)
{
    char buf[64];
    char *cmd;

    // assign some space delimited words to buf...

    if (strcmp(buf, "somestring junk") == 0) { // this works
        // do stuff here
    }

    cmd = strtok(buf, " ");

    if (strcmp(cmd, "somestring") == 0) { // this doesn't work
        // do stuff here
    }

    return 0;
}

我尝试了不同的变体,例如“somestring”或“somestring\n”,但都没有成功。代码编译没有错误或警告。 strcmp 的手册页让我相信 strcmp 应该可以工作。我做错了什么?

【问题讨论】:

  • 知道你在调试器中运行了这个。 (对吗??)调试器说buf的实际值是什么?
  • 请提供一个完整的例子——帮助我们帮助你!

标签: c linux char strtok strcmp


【解决方案1】:

它不起作用,因为您在 strcmp 中混合了 cmd 和 buf。以下代码应该适合您:

#include <stdio.h>
#include <cstring>

int main(void)
{
    char buf[64] = "somestring junk";
    char *cmd;

    // assign some space delimited words to buf...

    if (strcmp(buf, "somestring junk") == 0)
    {
            printf("First strcmp works!\n");
    }

    cmd = strtok(buf, " ");

    if (strcmp(cmd, "somestring") == 0)
    {
        printf("Second strcmp works!");
    }

    return 0;
}

【讨论】:

  • 你说得对,我将编辑我的代码片段,但问题仍然存在。
  • 真的吗?很奇怪,等我休息的时候再研究一下。
  • 我发现了问题。如果我在测试字符串中不包含空格的情况下进行测试,则会有一个尾随 \n 或一些 cr 字符。不过,感谢您的帮助。
  • 没问题,我刚刚编辑了我的答案,显示了我为测试它所做的工作。
猜你喜欢
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2020-10-22
  • 2018-07-11
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多