17-fgets()和fputs()函数
13.4.2 fgets() 和 fputs() 函数
第11章时介绍过 fgets() 函数。它的第1个参数和 gets() 函数一样,也是表示存储输入位置的地址( char * 类型);第2个参数是一个整数,表示待输入字符串的大小[1];最后一个参数是文件指针,指定待读取的文件。下面是一个调用该函数的例子:
fgets(buf, STLEN, fp);
这里, buf 是 char 类型数组的名称, STLEN 是字符串的大小, fp 是指向 FILE 的指针。
fgets() 函数读取输入直到第1个换行符的后面,或读到文件结尾,或者读取 STLEN-1 个字符(以上面的 fgets() 为例)。然后, fgets() 在末尾添加一个空字符使之成为一个字符串。字符串的大小是其字符数加上一个空字符。如果 fgets() 在读到字符上限之前已读完一整行,它会把表示行结尾的换行符放在空字符前面。 fgets() 函数在遇到 EOF 时将返回 NULL 值,可以利用这一机制检查是否到达文件结尾;如果未遇到 EOF 则返回之前传给它的第一个参数地址。
fputs() 函数接受两个参数:第1个是字符串的地址;第2个是文件指针。该函数把根据传入地址找到的字符串写入指定的文件中。和 puts() 函数不同, fputs() 在打印字符串时不会在其末尾添加换行符。下面是一个调用该函数的例子:
fputs(buf, fp);
这里, buf 是字符串的地址, fp 用于指定目标文件。
由于 fgets() 保留了换行符, fputs() 就不会再添加换行符,它们配合得非常好。如第11章的程序清单11.8所示,即使输入行比 STLEN 长,这两个函数依然处理得很好。