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。错误在哪里?
答
strrev()
不是一个standatd C库函数。
你strrev()
正反转的实际字符串str
,然后再与改变的字符串strcmp()
去。所以结果总是相同的。
如果你想有希望的结果:
- 使原始字符串
- 的副本传递原始字符串
strrev()
- 与早期的副本进行比较。
答
什么是strrev()
?这不是一个标准的C函数。
我的假设是,它不会像你想象的那样工作,即它不会创建并返回字符串的新堆副本。当然,如果你期望得到,那么就有一个错误,你不能保留返回的指针,所以你可以在完成之后使用free()
。
基本上,你似乎希望C字符串在高级语言中表现得像字符串一样,他们实际上并不这样做。
阅读您首先尝试使用的功能的文档。 strrev似乎恢复给定的字符串,而不是创建一个新的。故事结局。 – zubergu 2014-10-30 10:25:18
而不是结束“strcmp()比较不等字符串时返回0”,考虑'strcmp()'已经有40多年了,并且工作正确。问“为什么字符串'str'和'strrev(str)'相等? – chux 2014-10-30 14:12:19