【发布时间】:2012-08-19 23:02:45
【问题描述】:
由于未知原因,运行我的 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() 调用中断,您传递的长度不正确。未初始化的 char[] 具有随机长度。练习使用调试器查看此类问题。
-
非常感谢。我今天将学习使用调试器。
-
只是一个额外的问题。如果我使用 strlen() 将数组初始化为 0 后,程序将结束,我没有机会输入字符串。将 strlen() 更改为 sizeof 可以解决问题,但为什么会出现上述情况?
-
@hardpenguin
fgets(s, num, stream)读取字符,直到读取 (num-1) 个字符或到达换行符或文件结尾,以先到者为准。当使用全 0 初始化字符串时,strlen返回 0,而fgets没有要读取的字符。