输入输出函数读写细节
字符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:把字符串写到标准输出,字符串中有几个换行符就写几个换行符,并且在写完后,它还会额外添加一个换行符到标准输出。