©
This document uses PHP Chinese website manual Release
在头文件<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数组的元素的指针 |
---|---|---|
计数 | - | 要写入的最大字符数(通常是str的长度) |
流 | - | 文件流从中读取数据 |
str
成功时,空指针失败。
如果故障是由文件结束条件引起的,则另外设置eof指示器(参见feof()
)stream
。str
在这种情况下,指向的数组内容不会改变。
如果故障是由其他错误引起的,请设置错误指示器(参见ferror()
)stream
。指向的数组的内容str
是不确定的(它甚至可能不以null结尾)。
如果遇到除文件结束条件以外的故障,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标准(ISO / IEC 9899:2011):
7.21.7.2 fgets函数(p:331)
C99标准(ISO / IEC 9899:1999):
7.19.7.2 fgets函数(p:296)
C89 / C90标准(ISO / IEC 9899:1990):
4.9.7.2 fgets函数