fgets adds \0 or \n at the end of the input?

柔情痞子 提交于 2019-12-03 22:47:59

问题


I've some doubts about fgets. From what I know, it adds "\n" at the end of the string, and not "\0". So if I write this code:

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

So fgets reads two characters, I give as input "y", so buff should be "y\n". I'd expect printf to print y and add a line, while it prints "y" without adding a line. Can you explain why?


回答1:


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

Reads characters from input stream and stores them as a C string into str until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

A terminating null character ('\0') is automatically appended after the characters copied to str.




回答2:


It must terminate the string, so yes it will always add '\0' at the end. However, fgets might not always add the newline, if it doesn't fit. I recommend this reference page for fgets.




回答3:


According to man page it clearly given :

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

fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A '\0' is stored after the last character in the buffer.



来源:https://stackoverflow.com/questions/26339095/fgets-adds-0-or-n-at-the-end-of-the-input

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!