#include <stdio.h>
char *fgets(char *restrict buf, int n, FILE *restrict fp);
char *gets(char *buf);
若成功返回指针buf,若到文件结尾或出错返回指针NULL
fgets用于从指定文件流fp指向的文件中,将换行符连同它前面的字符读到buf中,当然字符总数(包括换行符)要小于n - 1。因为此buf是以NULL结尾的,这就意味着我们最多只能读n - 1个字符到buf中。如果大于n,则读前n - 1个字符到缓冲区buf,当下次调用继续读该行。特别注意,该函数不能用于读二进制文件。
总结下,也就是换行符和前n - 1个字符,谁先满足就结束。
gets用于从stdin将换行符前面的字符读到buf中,并丢掉此换行符。由于该函数没有指定buf的长度,容易造成溢出。
#include <stdio.h>
int fputs(const char *restrict buf, FILE *restrict fp);
int puts(const char *buf);
若成功返回非负值,出错返回EOF
fputs将buf中以NULL结尾的字符串写到指定文件流fp指向的文件,但不会将NULL也写到文件。
puts将buf中以NULL结尾的字符串也到stdout,并在结尾自动加上一个换行符。
总结:
fgets会将换行符一并存入到指定的buf中,fputs会将结尾的NULL丢掉。
gets会丢掉换行符,puts会自动加上换行符。