c - strcmp() 认为字符串不相等……但它们是相等的吗?

标签 c compare fgets strcmp

<分区>

由于未知原因,运行我的 C 程序的结果非常出乎意料。我认为这一定是初学者的错误,但我真的找不到它在哪里。

#include <stdio.h>
#include <string.h>
int main()
{
char string1[50];
char string2[50];
int compare;

puts("Enter two strings: ");
fgets(string1, strlen(string1)+1, stdin);
fgets(string2, strlen(string2)+1, stdin);

compare=strcmp(string1, string2); /* usage of extra variable makes the code more readable but wastes more memory */

printf("%d: ",compare);

if (compare<0) puts("First string is lesser");
else if (compare>0) puts ("First string is bigger");
     else puts("Strings are equal");


return 0;
  }

关于测试:

Enter two strings: 
heheisntthisalongstring
heheisntthisalongstring
1: First string is bigger


------------------
(program exited with code: 0)
Press return to continue

这些字符串不应该相等吗?

最佳答案

fgets(string1, strlen(string1)+1, stdin);
fgets(string2, strlen(string2)+1, stdin);

这些都是错误的。 string1string2没有初始化,strlen只是统计字节数,直到命中\0。在这种情况下,strlen 可以返回任何(随机非负)数字。

这里使用sizeof,而不是strlen

关于c - strcmp() 认为字符串不相等……但它们是相等的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108423/

相关文章:

c - rand() 在 OSX 上是否返回零?

c - 使用 mmap 在 C 中共享内存中的结构

c - 我在 matmul 函数上使用了 openMP 指令,它不起作用

iOS比较功能

c fgets 不等待输入

c - fgets 应该使用什么大小?

C指针混淆——指向char数组的指针

algorithm - 除了逐字节检查外,还有哪些其他方法可以确定两个文件内容是否相同?

javascript - 比较日期字符串

c - fgets() 如何从 stdin 读取数据?