第一次调用fread后出现ftell错误

所以我有一个非常简单的程序,它读取文件的3个第一个字节:

 int main(void){FILE * fd = NULL;  int i;  unsigned char test = 0;  fd = fopen(“test.bmp”,“r”);  printf(“position:%ld \ n”,ftell(fd));  for(i = 0; i <3; i ++){fread(&test,sizeof(unsigned char),1,fd);  printf(“position:%ld char:%X \ n”,ftell(fd),test);  } return(0);  } 

当我用文本文件尝试它时它工作正常:

位置:0
位置:1个字符:61
位置:2个字符:62
位置:3个字符:63

但是当我用PNG运行时,我得到:

位置:0
职位:147字符:89
位置:148字符:50
位置:149字符:4E

请注意,文件的3个第一个字节确实是89 50 4E,但我不知道147来自哪里。 使用bmp文件,我得到:

位置:0
位置:-1字符:42
位置:0字符:4D
位置:1个字符:76

你知道这些第一个职位来自哪里吗? 非常感谢你的帮助

您需要以二进制模式打开文件:

fd = fopen("test.bmp", "rb"); 

如果您尝试在文本模式下读取二进制文件(如位图),则与回车和换行符对应的字节会混淆事物。

请看这个问题从bmp文件中读取字节 。

看起来问题是打开它的模式。