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 的最后一个字符之后的位置写入一个空字符。
目录 |
参数
| str | - | 指向字符数组元素的指针 |
| count | - | 要写入的最大字符数(通常为 str 的长度) |
| stream | - | 用于读取数据的文件流 |
返回值
str 成功时返回字符串指针,失败时返回空指针。
如果遇到文件结束条件,将在 stream 上设置 eof 指示符(参见 feof() )。仅当导致未读取任何字节时才视为失败,此时返回空指针,且 str 所指数组的内容保持不变(即首个字节不会被空字符覆盖)。
若失败由其他错误引起,则设置流上的 错误 指示器(参见 ferror() )。由 str 指向的数组内容是不确定的(可能甚至不以空字符结尾)。
注释
POSIX 额外要求 ,当发生读取错误时, fgets 应设置 errno 。
尽管标准规范在 count <= 1 的情况下 表述不明确 ,但常见实现会
- 如果 count < 1 ,不执行任何操作,报告错误,
- 如果 count == 1 ,
-
- 某些实现不执行任何操作,报告错误,
- 其他实现不读取任何内容,在 str [ 0 ] 中存储零值,报告成功。
示例
#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
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.21.7.2 fgets 函数 (页: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.21.7.2 fgets 函数 (页: 241)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.21.7.2 fgets 函数 (p: 331)
- C99标准(ISO/IEC 9899:1999):
-
- 7.19.7.2 fgets函数(页码:296)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.9.7.2 fgets 函数
参考
|
(C11)
(C11)
(C11)
|
从
stdin
、文件流或缓冲区读取格式化输入
(函数) |
|
(C11中移除)
(C11)
|
从
stdin
读取字符串
(函数) |
|
向文件流写入字符串
(函数) |
|
|
(动态内存 TR)
|
从流读取数据到自动调整大小的缓冲区,直到遇到分隔符/行结束
(函数) |
|
C++ 文档
for
fgets
|
|