0

它不相等:

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?谢谢你。

4

1 回答 1

4

fgets(与 不同gets)包括与\n在行尾按下的回车相对应的尾随。如果您将3其作为限制,它将截断字符串,丢弃\n.

从手册页:

fgets()从流中最多读入一个小于 size 的字符并将它们存储到 指向的缓冲区中s。在 EOF 或换行符后停止读取。如果读取了换行符,则将其存储到缓冲区中。终止的空字节 ( '\0') 存储在缓冲区中的最后一个字符之后。

于 2012-11-18T22:54:04.637 回答