【发布时间】:2010-11-27 16:52:42
【问题描述】:
在网上找到的各种示例中,fgetc() 的用法如下:
FILE *fp = fopen(PATH, "r");
if (fp == NULL) {
perror("main");
exit(EXIT_FAILURE);
}
int ch;
while (ch = fgetc(fp) != EOF) {
// do something
}
但是根据 fgetc() 的手册页
如果发生读取错误,则错误 应设置流的指示符, fgetc() 应返回 EOF、[CX] 和 应设置 errno 以指示错误。
所以我也需要检查一下吗?怎么做?
【问题讨论】:
-
你需要在赋值两边加上括号:
while ((ch = fgetc(fp)) != EOF),但是有了这个修复,只检查 EOF 就足够了。您将在错误或实际 EOF 上获得 EOF;如果你愿意,你可以在循环之后消除这两种情况的歧义。