【问题标题】:strcmp() returns 0 when comparing to unequal stringsstrcmp() 与不相等的字符串比较时返回 0
【发布时间】:2014-10-30 10:19:36
【问题描述】:

在 C 中,如果两个字符串相等,strcmp() 函数将返回 0。 当我给出这样的代码时,

char str[10] = "hello";
if(strcmp(str,strrev(str))==0)
{
printf("1");
}
else
printf("0");

如果它是回文字符串,则应打印 1,如果不是回文字符串,则应打印 0。 但即使给定字符串“hello”不是回文,它也会打印 1。哪里错了?

【问题讨论】:

  • 阅读有关您尝试首先使用的功能的文档。 strrev 似乎恢复了给定的字符串,而不是创建新的字符串。故事结束。
  • 与其得出结论“strcmp() 在与不相等的字符串比较时返回 0”,不如考虑 strcmp() 已经存在 40 多年并且工作正常。问“为什么字符串 str 和 strrev(str) 相等?

标签: c string palindrome strcmp


【解决方案1】:

strrev() 是什么?这不是标准的 C 函数。

我的假设是它不像你想象的那样工作,即它不会创建和返回字符串的新堆副本。当然,如果是你所期望的,那么有一个错误是你没有保留返回的指针,所以你可以在完成后free()它。

基本上,您似乎希望 C 字符串的行为类似于高级语言中的字符串,但实际上并非如此。

【讨论】:

    【解决方案2】:

    strrev() 不是标准 C 库函数。

    你的 strrev() 首先将实际字符串 str 反转,然后使用更改后的字符串返回 strcmp()。所以结果总是相等的。

    如果你想得到想要的结果:

    1. 复制原始字符串
    2. 将原始字符串传递给strrev()
    3. 与之前的副本比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      相关资源
      最近更新 更多