?
This document uses PHP Chinese website manual Release
在頭文件<stdio.h>中定義 | ||
---|---|---|
char * fgets(char * str,int count,F(xiàn)ILE * stream); | (直到C99) | |
char * fgets(char * restrict str,int count,F(xiàn)ILE * restrict stream); | (自C99以來(lái)) |
count - 1
從給定的文件流中讀取大多數(shù)字符并將它們存儲(chǔ)在指向的字符數(shù)組中str
。如果發(fā)生文件結(jié)尾或發(fā)現(xiàn)換行符,則停止解析,在這種情況下str
將包含該換行符。如果沒(méi)有發(fā)生錯(cuò)誤,則在寫入最后一個(gè)字符后立即寫入空字符str
。
如果count
小于1 ,行為是不確定的。
str | - | 指向char數(shù)組的元素的指針 |
---|---|---|
計(jì)數(shù) | - | 要寫入的最大字符數(shù)(通常是str的長(zhǎng)度) |
流 | - | 文件流從中讀取數(shù)據(jù) |
str
成功時(shí),空指針失敗。
如果故障是由文件結(jié)束條件引起的,則另外設(shè)置eof指示器(參見feof()
)stream
。str
在這種情況下,指向的數(shù)組內(nèi)容不會(huì)改變。
如果故障是由其他錯(cuò)誤引起的,請(qǐng)?jiān)O(shè)置錯(cuò)誤指示器(參見ferror()
)stream
。指向的數(shù)組的內(nèi)容str
是不確定的(它甚至可能不以null結(jié)尾)。
如果遇到除文件結(jié)束條件以外的故障,POSIX還需要這些fgets
設(shè)置errno
。
雖然標(biāo)準(zhǔn)規(guī)范是不明確的count==1
,普通實(shí)現(xiàn)不讀取字符,存儲(chǔ)零str[0]
和報(bào)告成功(返回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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21.7.2 fgets函數(shù)(p:331)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19.7.2 fgets函數(shù)(p:296)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9.7.2 fgets函數(shù)