我对fgets有些怀疑。据我所知,它在字符串的末尾添加“\ n”,而不是“\ 0”。所以,如果我写这段代码:
fgets(buff,2,stdin);
printf("%s",buff);
所以fgets读取两个字符,我输入“y”,所以buff应该是“y \ n”。我希望printf打印y并添加一行,而它打印“y”而不添加一行。你能解释一下原因吗?
答案 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'存储在缓冲区中的最后一个字符之后。