不相等:
fgets (answer, 256, stdin);
if (strncmp(answer, "sta", 4) == 0)
printf("omg, it's equal");
此代码为:
fgets (answer, 4, stdin);
if (strncmp(answer, "sta", 4) == 0)
printf("omg, it's equal");
为什么呢?这是因为在第一个,答案没有\ 0在第四个地方我猜(如果我把它改为3而不是4它工作)。但是fgets做了什么?第一个字符串答案是str \whitespace*253\0"
?在第二个是str\0
?谢谢。
答案 0 :(得分:4)
fgets
(与gets
不同)包含与该行末尾按下的返回相对应的尾随\n
。如果您将3
作为限制,则会截断字符串,放弃\n
。
从联系手册:
fgets()
从流和中读取最多一个小于大小的字符 将它们存储到s
指向的缓冲区中。读后停止了 EOF或换行符。如果读取换行符,则将其存储到缓冲区中。 终止空字节('\0'
)存储在最后一个字符之后 缓冲区。