strcmp()在与不等字符串比较时返回0

问题描述:

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

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

这应该打印1个如果一个回文字符串或它应该打印0,如果它不是一个回文。 但即使给定字符串“hello”不是回文,它也会打印1。错误在哪里?

+1

阅读您首先尝试使用的功能的文档。 strrev似乎恢复给定的字符串,而不是创建一个新的。故事结局。 – zubergu 2014-10-30 10:25:18

+1

而不是结束“strcmp()比较不等字符串时返回0”,考虑'strcmp()'已经有40多年了,并且工作正确。问“为什么字符串'str'和'strrev(str)'相等? – chux 2014-10-30 14:12:19

strrev()不是一个standatd C库函数。

strrev()正反转的实际字符串str,然后再与改变的字符串strcmp()去。所以结果总是相同的。

如果你想有希望的结果:

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

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

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

基本上,你似乎希望C字符串在高级语言中表现得像字符串一样,他们实际上并不这样做。