与不相等的字符串进行比较时,strcmp()返回0
在C语言中,如果两个字符串相等,则strcmp()函数返回0。 当我给出这样的代码时与不相等的字符串进行比较时,strcmp()返回0,c,string,palindrome,strcmp,C,String,Palindrome,Strcmp,在C语言中,如果两个字符串相等,则strcmp()函数返回0。 当我给出这样的代码时 char str[10] = "hello"; if(strcmp(str,strrev(str))==0) { printf("1"); } else printf("0"); 如果是回文字符串,则应打印1;如果不是回文字符串,则应打印0。 但即使给定的字符串“hello”不是回文,它也会打印1。错误在哪里?什么是strev()?这不是标准的C函数 我的假设是,它不会像您认为的那样工作,也就是说,它不会创建
char str[10] = "hello";
if(strcmp(str,strrev(str))==0)
{
printf("1");
}
else
printf("0");
如果是回文字符串,则应打印1;如果不是回文字符串,则应打印0。
但即使给定的字符串“hello”不是回文,它也会打印1。错误在哪里?什么是strev()?这不是标准的C函数
我的假设是,它不会像您认为的那样工作,也就是说,它不会创建并返回字符串的新堆副本。当然,如果您希望这样做,那么就存在一个错误,即您没有保留返回的指针,因此在完成时可以free()
释放它
基本上,您似乎期望C字符串的行为类似于更高级语言中的字符串,但实际上并非如此。strev()
不是标准的C库函数
您的strrev()
首先反转实际字符串str
,然后使用更改的字符串执行strcmp()
。所以结果总是相等的
如果希望获得所需的结果:
strev()
阅读有关您首先尝试使用的函数的文档。strrev似乎恢复给定字符串,而不是创建新字符串。故事结束,而不是结束“StrucMP()返回0,当与不相等的字符串比较时,考虑<代码> STRMP())/代码>已经出现了40年多了,并且工作正常。询问“为什么字符串
str
和strev(str)
相等?”?