非常教程

C参考手册

文件输入/输出 | File input/output

fgets

在头文件<stdio.h>中定义

char * fgets(char * str,int count,FILE * stream);

(直到C99)

char * fgets(char * restrict str,int count,FILE * restrict stream);

(自C99以来)

count - 1从给定的文件流中读取大多数字符并将它们存储在指向的字符数组中str。如果发生文件结尾或发现换行符,则停止解析,在这种情况下str将包含该换行符。如果没有发生错误,则在写入最后一个字符后立即写入空字符str

如果count小于1 ,行为是不确定的。

参数

str

-

指向char数组的元素的指针

计数

-

要写入的最大字符数(通常是str的长度)

-

文件流从中读取数据

返回值

str 成功时,空指针失败。

如果故障是由文件结束条件引起的,则另外设置eof指示器(参见feof()streamstr在这种情况下,指向的数组内容不会改变。

如果故障是由其他错误引起的,请设置错误指示器(参见ferror()stream。指向的数组的内容str是不确定的(它甚至可能不以null结尾)。

注意

如果遇到除文件结束条件以外的故障,POSIX还需要这些fgets设置errno

虽然标准规范是不明确的count==1,普通实现不读取字符,存储零str[0]和报告成功(返回str)。

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
 
    rewind(tmpf);
 
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);
 
    if (feof(tmpf))
       puts("End of file reached");
}

输出:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.21.7.2 fgets函数(p:331)
  • C99标准(ISO / IEC 9899:1999):
    • 7.19.7.2 fgets函数(p:296)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.9.7.2 fgets函数
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。