fgetc
一次从文件中读取一个字符,并将该字符作为int
的类型返回。如果文件结束,则fgetc
会返回EOF
(“可能”(int)(-1)
)。但是,我经常看到这个:
char ch;
while ((ch = fgetc(fp)) != EOF) { /* Do something. */ }
|<-- PARN -->|
这就是我关注的问题:
fgetc
读取OxFF
并返回0x000000FF
。0xFF
已分配给ch
。 (从int
输入char
)PARN
的类型为char
,则会将其提升为0xFFFFFFFF
。PARN == EOF
而退出了while循环。 (停止阅读文件)我们如何判断阅读OxFF
并将EOF
分开?
答案 0 :(得分:3)
fgetc
的返回类型为int
的完整原因是因为它可以返回unsigned char
或EOF
的值。这清楚地记录在规范和任何有关学习C的良好资源中。如果使用类型char
的对象来存储结果,则这是程序员错误。
答案 1 :(得分:1)
是的,您的关注是正确的,在进行比较之前,该值会被转换为char。
最简单的解决方案是:
int chread;
while ((chread = fgetc(fp)) != EOF) { char ch = chread; /* Do something. */ }
答案 2 :(得分:0)