输入输出函数读写细节

红心字符I/O

int fgetc( FILE *stream );
int getc( FILE *stream );
int getchar( void );

fgetc、getc和getchar:从流中读取下一个字符并返回(getchar总是从标准输入中读);如果流中没有可读的字符那么返回EOF

int fputc( int character, FILE *stream );
int putc( int character, FILE *stream );
int putchar( int character );

fputc、putc和puchar:把单个字符写到指定的流中(putchar总是写到标准输出);无论何种原因,失败时均返回EOF

红心非格式化行I/O

char * fgets( char *buffer, int buffer_size, FILE *stream );
char *gets( char *buffer );

int fputs( char const *buffer, FILE *stream );
int puts( char const *buffer );

fgets从指定流中读取字符并保存到buffer中,直到出现下列两种情况时fgets才停止读取:(1)读到了换行符(newline)并将换行符存入buffer中;(2)读取了buffer_size – 1 个字符。这两种情况下都会在buffer最后加一个NUL字符从而构成一个字符串。(注:对于情况(1)是在换行符newline之后添加NUL字符,并不会覆盖掉换行符。) 如果返回NULL说明读到了文件末尾。否则返回一个指向buffer的指针。

注:NUL不在strlen计数范围内,而换行符newline在strlen的计数范围之内。

gets从标准输入读取一行(也就是说gets一直读到换行符为止,不管buffer能不能装得下,这也正是gets的缺陷所在,因此不推荐使用该函数),但它不把结尾的换行符newline保存到buffer中。

fputs:传递给fputs的buffer参数必须包含一个以NUL结尾的字符串,fputs将该字符串写到指定的流中,字符串中有几个换行符就写几个换行符,没有就一个也不写。

puts:把字符串写到标准输出,字符串中有几个换行符就写几个换行符,并且在写完后,它还会额外添加一个换行符到标准输出。

原文地址:https://www.cnblogs.com/nufangrensheng/p/3610510.html