簡體   English   中英

使用C中的fgets讀取文本文件直到EOF

[英]Reading text-file until EOF using fgets in C

在C中使用fgets讀取文本文件直到EOF的正確方法是什么? 現在我有了這個(簡化):

char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { // tsin is FILE* input
   ... //doing stuff with line
}

具體來說,我想知道是否應該有其他東西作為時間條件? 從文本文件到“行”的解析是否必須在while條件下執行?

根據參考

成功時,函數返回str 如果在嘗試讀取字符時遇到文件結尾,則設置eof指示符(feof)。 如果在讀取任何字符之前發生這種情況,則返回的指針是空指針 (並且str的內容保持不變)。 如果發生讀取錯誤,則設置錯誤指示符(ferror)並返回空指針(但str指向的內容可能已更改)。

因此檢查返回值是否為NULL就足夠了。 解析也進入了while-body。

你所做的是100%好,但你也可以簡單地依靠fgets的返回作為測試本身,例如

char line[100 + 1] = "";  /* initialize all to 0 ('\0') */

while (fgets(line, sizeof(line), tsin)) { /* tsin is FILE* input */
    /* ... doing stuff with line */
}

為什么? fgets將在成功時返回指向line的指針,或在失敗時返回NULL (無論出於何種原因)。 有效的指針將測試為true ,當然, NULL將測試為false

注意:你必須確保該line在作用域中聲明的字符數組 ,使用sizeof line作為長度。如果line只是指向數組的指針,那么你只讀取sizeof (char *)字符)


我有同樣的問題,我以這種方式解決了它

while (fgets(line, sizeof(line), tsin) != 0) { //get an int value
   ... //doing stuff with line
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM