下面两个函数提供每次输入一行的功能。
- #include <stdio.h>
- char *fgets(char *restrict buf, int n, FILE *restrict fp);
- char *gets(char *buf);
返回值:成功返回buf,已到达文件结尾或出错则返回NULL
这两个函数都指定了缓冲区的地址,读入的行将送入其中。gets从标准输入读,而fgets则从指定的流读。
对于fgets,必须指定缓冲区的长度n。此函数一直读到下一个换行符为止,但是不超过n-1个字符,读入的字符被送入缓冲区。该缓冲区以null字符结尾。如若改行(包括最后一个换行符)的字符数超过n-1,则fgets只返回一个不完整的行,但是,缓冲区总是以null字符结尾。对fgets的下一次调用会继续读改行。
使用gets时不能指定缓冲区的长度。这样就可能造成缓冲区溢出。gets与fgets的另一个区别是,gets并不将换行符存入缓冲区中。
fputs和puts提供每次输出一行的功能。
- #include <stdio.h>
- int fputs(const char *restrict str, FILE *restrict fp);
- int puts(const char *str);
返回值:成功返回非负值,出错返回EOF
函数fputs将一个以null符终止的字符串写到指定的流,尾端的终止符不写出。
puts将一个一null符终止的字符串写到标准输出,终止符不写出。但是,puts然后又将一个换行符写到标准输出。
如果总是使用fgets和fputs,那么就会熟知在每行终止处我们必须自己处理换行符。