第一次调用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文件中读取字节 。
看起来问题是打开它的模式。