在C中,如果两个字符串相等,strcmp()函数返回0。 当我提供这样的代码时,
char str[10] = "hello";
if(strcmp(str,strrev(str))==0)
{
printf("1");
}
else
printf("0");
如果它是一个回文字符串,则应打印1,如果不是回文,则应打印0。 但即使给定的字符串"你好"它也打印1不是回文。错误在哪里?
答案 0 :(得分:6)
什么是strrev()
?那不是标准的C函数。
我的假设是它不像您认为的那样工作,即它不会创建并返回字符串的新堆副本。当然, if 你希望如此,那么你就不会保留返回的指针,这样你就可以在完成后free()
。
基本上,你似乎期望C字符串在更高级别的语言中表现得像字符串,但实际上并非如此。
答案 1 :(得分:1)
strrev()
不是标准的C库函数。
您的 strrev()
首先反转实际字符串str
,然后使用更改后的字符串转到strcmp()
。所以结果总是相等的。
如果您想获得所需的结果:
strrev()