fgets
來自 cppreference.com
定義於標頭檔案 <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 指向的陣列內容不變(即第一個位元組未被空字元覆蓋)。
如果失敗是由其他錯誤引起的,則在 stream 上設定 *error* 指示器(參見 ferror())。由 str 指向的陣列內容是不確定的(甚至可能不是以 null 結尾)。
[編輯] 注意
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 The fgets function (p: TBD)
- C17 標準 (ISO/IEC 9899:2018)
- 7.21.7.2 The fgets function (p: 241)
- C11 標準 (ISO/IEC 9899:2011)
- 7.21.7.2 The fgets function (p: 331)
- C99 標準 (ISO/IEC 9899:1999)
- 7.19.7.2 The fgets function (p: 296)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.9.7.2 The fgets function
[編輯] 另請參見
(C11)(C11)(C11) |
從 stdin、檔案流或緩衝區讀取格式化輸入 (function) |
(在 C11 中移除)(C11) |
從 stdin 讀取一個字串 (function) |
將字元字串寫入檔案流 (function) | |
(動態記憶體 TR) |
從流中讀取到自動調整大小的緩衝區,直到分隔符/行尾 (function) |
C++ 文件 for fgets
|