【发布时间】:2015-07-10 15:16:05
【问题描述】:
当使用fgetc 读取流的下一个字符时,您通常会检查文件结尾不是由
if ((c = fgetc (stream)) != EOF)
其中c 属于int 类型。然后,要么已达到文件结尾且条件将失败,要么c 应为unsigned 字符转换为int,预计与EOF 不同——对于EOF确保为负。好吧……显然。
但是有一个小问题... 通常char 类型不超过8 位,而int 必须至少有16 位,所以每个unsigned char 都可以表示为int。然而,在char 将有 16 位或 32 位的情况下(我知道,在实践中从来没有这种情况......),没有理由不能拥有sizeof(int) == 1,所以它会是(理论上!)可能fgetc (stream) 返回EOF(或另一个负值)但尚未达到文件结尾...
我错了吗?如果未达到文件结尾,C 标准中是否有阻止fgetc 返回EOF 的内容? (如果是,我找不到它!)。还是if ((c = fgetc (stream)) != EOF) 语法不完全可移植?...
编辑:确实,这是问题 #3860943 的副本。我在第一次搜索时没有找到那个问题。感谢您的帮助! :-)
【问题讨论】:
-
我已经读过了,但这并不能回答我的问题...