fgets

来自cppreference.com
< c‎ | io
定义于头文件 <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数组元素的指针
count - 写入的最大字符数(典型的为str的长度)
stream - 读取数据来源的文件流

[编辑] 返回值

成功时为str,失败时为空指针。

若文件尾条件导致了失败,则附带设置stream文件尾指示器(见feof())。此情况下str所指向的数组内容不会被改变。

若某些其他错误导致了失败,则设置stream错误指示器(见ferror())。str所指向的数组内容是不确定的(它甚至可以不是空终止)。

[编辑] 注意

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 standard (ISO/IEC 9899:2011):
  • 7.21.7.2 The fgets function (p: 331)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.7.2 The fgets function (p: 296)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.7.2 The fgets function

[编辑] 参阅

stdin、文件流或缓冲区读取格式化输入
(函数) [edit]
(C11 前)
(C11 起)
stdin读取一个字符串
(函数) [edit]
将一个字符串写入文件流
(函数) [edit]
从流读入至动态改变大小的缓冲区,直到分隔符/行尾
(函数) [edit]
fgetsC++文档