与不相等的字符串进行比较时,strcmp()返回0

时间:2014-10-30 10:19:36

标签: c string palindrome strcmp

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

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

如果它是一个回文字符串,则应打印1,如果不是回文,则应打印0。 但即使给定的字符串"你好"它也打印1不是回文。错误在哪里?

2 个答案:

答案 0 :(得分:6)

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

我的假设是它不像您认为的那样工作,即它不会创建并返回字符串的新堆副本。当然, if 你希望如此,那么你就不会保留返回的指针,这样你就可以在完成后free()

基本上,你似乎期望C字符串在更高级别的语言中表现得像字符串,但实际上并非如此。

答案 1 :(得分:1)

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

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

如果您想获得所需的结果:

  1. 制作原始字符串的副本
  2. 将原始字符串传递给strrev()
  3. 与早期版本进行比较。