std::fgets

< cpp‎ | io‎ | c
 
 
 
 
定义于头文件 <cstdio>
char* fgets( char* str, int count, std::FILE* stream );

从给定文件流读取最多 count - 1 个字符并将它们存储于 str 所指向的字符数组。若文件尾出现或发现换行符则终止分析,后一情况下 str 将包含一个换行符。若读入字节且无错误发生,则紧随写入到 str 的最后一个字符后写入空字符。

参数

str - 指向 char 数组元素的指针
count - 要写入的最大字符数(典型地为 str 的长度)
stream - 读取数据来源的文件流

返回值

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

若遇到文件尾条件导致了失败,则设置 stream 上的文件尾指示器(见 std::feof() )。这仅若它导致未读取字符才是失败,该情况下返回空指针且不改变 str 所指向数组的内容(即不以空字符覆写首字节)。

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

注解

POSIX 额外要求fgets 遇到异于文件尾条件的失败则设置 errno

尽管标准规范在 count<=1 的情况下不明,常见的实现

  • count < 1 则不做任何事并报告错误
  • count == 1 ,则
  • 某些实现不做任何事并报告错误,
  • 其他实现不读内容,存储零于 str[0] 并报告成功

示例

#include <iostream>
#include <cstdio>
#include <cstdlib>
 
int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Alan Turing\n", tmpf);
    std::fputs("John von Neumann\n", tmpf);
    std::fputs("Alonzo Church\n", tmpf);
 
    std::rewind(tmpf);
    char buf[8];
    while (std::fgets(buf, sizeof buf, tmpf) != NULL) {
        std::cout << '"' << buf << '"' << '\n';
    }
}

输出:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"

参阅

stdin、文件流或缓冲区读取有格式输入
(函数)
(C++11 中弃用)(C++14 中移除)
stdin 读取字符串
(函数)
写字符串到文件流
(函数)