std::fgets
定义于头文件 <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 读取字符串 (函数) |
写字符串到文件流 (函数) |