【问题标题】:strcmp isn't comparing strings properly [duplicate]strcmp 没有正确比较字符串 [重复]
【发布时间】:2013-08-24 05:49:44
【问题描述】:

所以我有这个(不是完整的代码)

char list[1000][10];

strcpy(list[0],"ab");

printf("%d\n",strcmp(list[0],"ab"));

strcmp 返回 0。有人可以解释为什么会这样吗?

提前致谢。

【问题讨论】:

  • 因为两个比较的字符串相等,所以strcmp返回0。
  • linux.die.net/man/3/strcmp、pubs.opengroup.org/onlinepubs/9699919799/functions/strcmp.html,或者如果您的系统有 man 命令,则只是 man strcmp。
  • 见strcmp()(我建议深入几个级别并花一些时间在整个网站上)。
  • 我看到你也在数学板上。请记住,如果您习惯于在 Matlab 中编写东西,那么它的 strcmp() 的行为会有所不同(它返回 1 表示相等,而 C 的 strcmp() 返回 0)。
  • 这是一个有趣的想法 - 阅读手册页?可能会更好地理解并更快地回答

标签: c


【解决方案1】:

如果在这种情况下list[0] 包含“ab”,strcmp 方法将返回 0。

返回:

返回一个整数值,表示字符串之间的关系:

零值表示两个字符串相等。

大于零的值表示第一个不匹配的字符在str1中的值大于在str2中的值;而小于零的值则相反。

【讨论】:

  • 哦。我认为函数通常在它们为真时返回 1。这是我的一个愚蠢的错误。对不起。
  • @HasanSaad:这取决于功能。 strcmp 不返回真值或假值。在阅读该函数的文档之前,切勿尝试使用任何函数。
  • @HasanSaad “我想” - 不要那样做。 不要做假设。 从不。阅读文档。
  • @HasanSaad: strcmp 不返回“真”或“假”;它返回一个比较结果(如果 a b 则为正)。
  • @HasanSaad 在某些情况下确实如此,但每个功能都可能不同。 strcmp 用于比较,所以它返回正/零/负。
【解决方案2】:

strmp 在字符串匹配时返回 0。除非我遗漏了什么,否则它会按预期运行。

见:http://www.tutorialspoint.com/ansi_c/c_strcmp.htm

【讨论】:

    【解决方案3】:

    strcmp() 对字符串进行序数比较,而不是相等 测试。返回值为0表示字符串相等!

    如果您想测试是否相等,请使用此模式:

    if (strcmp(s, "ab") == 0) {
        // strings are equal
    }
    

    【讨论】:

      【解决方案4】:

      因为strcpy() 是一个将“右”字符串复制到“左”字符串的函数。 所以,strcpy(list[0],"ab"); 之后,list[0] 的内容就是“ab”。 那么,它们是相等的字符串,strcmp返回0,表示“相等”。

      【讨论】:

        【解决方案5】:

        您的字符串匹配,这就是它返回 0 的原因 这样做...

            char list[1000][10];
        
            strcpy(list[0],"ab");
            if(strcmp(list[0],"ab")==0)
                 printf("Matched\n",);
        

        【讨论】:

          【解决方案6】:

          如丹尼尔所说,返回值为0。

          取自cplusplus.com

          返回一个整数值,表示两者之间的关系 字符串:零值表示在两者中比较的字符 字符串形成相同的字符串。大于零的值表示 不匹配的第一个字符在 str1 比 str2 中;而小于零的值则相反。

          您还应该使用strncmp 而不是strcmp。

          【讨论】:

          • strncmp 并不总是比strcmp 好。只要您知道两个参数都是有效字符串,并且您想比较整个字符串而不仅仅是初始子字符串,strcmp 就可以了。
          • 没有 cplusplus.com,拜托。首先,问题被标记为 C。其次,cplusplus.com 是一个完全不准确的可怕网站。 this 更好。
          • 可能是,cplusplus.com 是一个可怕的网站,主要是关于 C++。但在这种情况下,答案似乎很好,并且参考也是关于 C 的。基思说得好,他是对的。
          猜你喜欢
          • 2013-03-12
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 1970-01-01
          • 2021-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多