C语言:未格式化的行I/O


一.前言
1.行I/O可以用两种方式执行—未格式化的或格式化的。这两种形式都用于操作字符串。

2.未格式化的I/O:简单读取或写入字符串,而格式化的I/O则执行数字和其他变量的内部和外部表示形式之间的转换。

二.未格式化I/O
1.未格式化I/O函数声明

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

2>char *gets(char *buffer);

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

4>int  puts(char  const *buffer);

1.gets和puts函数家族是用于操作字符串而不是单个字符。

2.fgets从指定的stream读取字符并把它们复制到buffer中。当它读取一个换行符并存储到缓冲区之后就不再读取。如果缓冲区内存储字符数到达buffer_size-1时它也停止读取。

1>在任何一种情况下,一个NUL字节将被添加到缓冲区所存储数据的末尾,使它成为一个字符串。

2>如果在任何字符读取前就到达了文件尾,缓冲区就未进行修改,fgets函数返回一个NULL指针。否则fgets返回它的第一个参数(指向缓冲区的指针)。这个返回值通常只用于检查是否到达了文件尾。

3.传递给fputs的缓冲区必须包含一个字符串,它的字符被写入到流中。这个字符串以NUL字节结尾,所以这个函数没有一个缓冲区长度参数。这个字符串是逐字写入的:如果它不包含一个换行符,就不会写如换行符。如果它包含了好几个换行符,所有的换行符都会被写入。因此,当fgets每次都读取一整行时,fputs既可以一次写如一行的一部分,也可以一次写入一整行,甚至可以一次写入好几行。如果写入时出现了错误,fputs返回常量值EOF,否则它将返回一个非负值。

4.gets和puts函数几乎和fgets 与fputs相同。他们之间的一个主要区别是:

1>当gets读取一行输入时,它并不在缓冲区中存储结尾的换行符。当puts写入一个字符串时,它在字符串写入之后向输出再添加一个换行符。

2>另一个区别仅仅在于gets,它没有缓冲区长度参数。因此gets无法判断缓冲区的长度。

相关内容