使用C程序我在Dev-C ++中编写,我想逐字节读取二进制文件。由于某种原因,读取停止在261个字节。这是一个简化的代码,它重现了bavior。
int main(int argc, char *argv[])
{
FILE *in_fp;
char in_filename[25] = "data.raw";
in_fp = fopen(in_filename,"r");
if( in_fp == NULL ) {
perror("Error while opening the input file.\n");
system("PAUSE");
exit(EXIT_FAILURE);
}
int readcnt = 0;
while (1) {
unsigned char buffer;
if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
printf("read eof after %d\n", readcnt);
break;
} else {
printf("read = %d\n", buffer);
}
readcnt++;
}
fclose(in_fp);
return 0;
}
文件data.raw的大小为104 KiB。
上述程序的输出结束于:
...
read = 255
read = 4
read = 204
read eof after 260
使用十六进制编辑器,我可以找到字节FF 04 CC,之后应该有字节,因为文件不在最后:FF 04 CC 1A 1F C5 8A
我还尝试了fgetc()
和feof()
,行为也一样。
为什么读数在偏移260处停止?