使用fgetc
函数读取流的下一个字符时,通常要检查是否已经到达文件结尾,方法是:
if ((c = fgetc (stream)) != EOF)
其中c
是int
类型。然后,要么已到达文件末尾并且条件失败,要么c
将是转换为int
的unsigned char
,预计它与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的重复。我一开始没有找到那个问题。谢谢你的帮助! :-)