fgets在输入结尾添加\ 0或\ n?

时间:2014-10-13 11:37:36

标签: c fgets

我对fgets有些怀疑。据我所知,它在字符串的末尾添加“\ n”,而不是“\ 0”。所以,如果我写这段代码:

fgets(buff,2,stdin);
printf("%s",buff);

所以fgets读取两个字符,我输入“y”,所以buff应该是“y \ n”。我希望printf打印y并添加一行,而它打印“y”而不添加一行。你能解释一下原因吗?

3 个答案:

答案 0 :(得分:3)

char * fgets ( char * str, int num, FILE * stream );

从输入流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。

换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。

在复制到str的字符后会自动附加终止空字符(' \ 0')。

答案 1 :(得分:1)

必须终止字符串,所以是的,它总是会在最后添加'\0'。但是,fgets可能并不总是添加换行符,如果它不合适的话。我推荐this reference page for fgets

答案 2 :(得分:1)

根据手册页明确指出:

 char *fgets(char *s, int size, FILE *stream);
  

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