网上都说2进制文件读取要用rb 但是我明显是用rb方式 但是就是不行,求解原因是什么 如何修改?

FILE *a=fopen("C:/123.exe","rb");
fseek(a,0L,SEEK_END);
long b=ftell(a);
char * loc=(char *)malloc(b);
if(loc==NULL)
printf("error");
memset(loc,0,b);
fseek(a,0L,SEEK_SET);
fread(loc,b,1,a);
fclose(a);
以rb方式打开,例如我自己创建个1.exe记事本方式打开写入 abc 123 就可以正确读取,但是如果是BMP那类的文件 就只读取前面几个字符(都是字符后有空格) 之后就都不读取了,为什么?

紫衣仙女
浏览 63回答 2
2回答

慕村9548890

根据你的程序,应当是读进来了;但最好按照unsigned char读入,另外也不能按照字符串处理,因为二进制文件中有许多0,打印输出时以%x格式打印。另外你还要判断一下这个b会不会超过64k,如果超大,需要用大模式来编译程序,以便支持大的内存区访问。建议用小些的文件测试。

拉丁的传说

"C:/123.exe"这里应该是"C:\\123.exe"才对,其他没有大问题。fread是按字节读取的,.exe文件有好多数据按字符是无法显示的,不知你是怎么判断没有读取正确。
打开App,查看更多内容
随时随地看视频慕课网APP