Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与不相等的字符串进行比较时,strcmp()返回0_C_String_Palindrome_Strcmp - Fatal编程技术网

与不相等的字符串进行比较时,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函数 我的假设是,它不会像您认为的那样工作,也就是说,它不会创建

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

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)
    相等?”?