strcmp()认为字符串不相等..但是它们呢?

har*_*uin 5 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;
  }
Run Code Online (Sandbox Code Playgroud)

并在测试:

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


------------------
(program exited with code: 0)
Press return to continue
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*rov 13

fgets(string1, strlen(string1)+1, stdin);
fgets(string2, strlen(string2)+1, stdin);
Run Code Online (Sandbox Code Playgroud)

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

使用sizeof,而不是在strlen这里.