C 参考手册
- C 语言
- C 关键词
- 预处理器
- C 标准库头文件
- 类型支持
- 程序支持工具
- 变参数函数
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 算法
- 数值
- 文件输入/输出
- gets, gets_s
- printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
- fopen, fopen_s
- fputc, putc
- fputs
- getchar
- putchar
- FILE
- fpos_t
- stdin, stdout, stderr
- freopen, freopen_s
- fwide
- setbuf
- setvbuf
- fclose
- fflush
- fread
- fwrite
- fgetc, getc
- fgets
- puts
- ungetc
- fgetwc
- fgetws
- fputwc, putwc
- fputws
- getwchar
- putwchar
- ungetwc
- scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
- wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
- vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
- vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
- wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
- vprintf, vfprintf, vsprintf, vsnprintf, vprintf_s, vfprintf_s, vsprintf_s, vsnprintf_s
- vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
- ftell
- fgetpos
- fseek
- fsetpos
- rewind
- clearerr
- feof
- ferror
- perror
- remove
- rename
- tmpfile, tmpfile_s
- tmpnam, tmpnam_s
- 本地化支持
- 原子操作库
- 线程支持库
- 实验性 C 标准库
- 有用的资源
- 符号索引
- 注释
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 则行为未定义。亦不指定是否写入空字符,若 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
参阅
(C11)(C11)(C11) |
从stdin、文件流或缓冲区读取格式化输入 (函数) |
(C11 中移除)(C11 起) |
从 stdin 读取一个字符串 (函数) |
将一个字符串写入文件流 (函数) | |
(动态内存 TR) |
从流读入至动态改变大小的缓冲区,直到分隔符/行尾 (函数) |