繁体   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