我正在Windows上编写C程序(系统语言是日语),并且我在处理二进制和ASCII文件的EOF问题方面遇到了问题。
我上周询问了这个问题,有位好心人帮助了我,但我仍然无法真正理解读取二进制或ASCII文件时程序的工作原理。
我进行了以下测试:
测试1:
int oneChar;
iFile = fopen("myFile.tar.gz", "rb");
while ((oneChar = fgetc(iFile)) != EOF) {
printf("%d ", oneChar);
}
测试2:
int oneChar;
iFile = fopen("myFile.tar.gz", "r");
while ((oneChar = fgetc(iFile)) != EOF) {
printf("%d ", oneChar);
}
在测试1中,二进制和ASCII文件都能正常运行。但在测试2中,当程序在一个二进制文件中遇到0x1A时就停止了读取。(这是否意味着1A == EOF?)ASCII表告诉我1A是一种控制字符,称为substitute(不知道是什么意思...)。当我printf("%d", EOF)时,它却给了我-1...
我还发现了这个问题,它告诉我操作系统确切地知道文件何时结束,所以我实际上不需要在文件中找到EOF,因为EOF超出了一个字节的范围(那1A呢?)
有人能帮我澄清一下吗?先谢谢了。