fread函数无法正确读取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread函数无法正确读取数据相关的知识,希望对你有一定的参考价值。

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那类的文件 就只读取前面几个字符(都是字符后有空格) 之后就都不读取了,网上都说2进制文件读取要用rb 但是我明显是用rb方式 但是就是不行,求解原因是什么 如何修改?

参考技术A 根据你的程序,应当是读进来了;
但最好按照unsigned char读入,另外也不能按照字符串处理,因为二进制文件中有许多0,打印输出时以%x格式打印。
另外你还要判断一下这个b会不会超过64k,如果超大,需要用大模式来编译程序,以便支持大的内存区访问。建议用小些的文件测试。本回答被提问者和网友采纳
参考技术B "C:/123.exe"这里应该是"C:\\123.exe"才对,其他没有大问题。fread是按字节读取的,.exe文件有好多数据按字符是无法显示的,不知你是怎么判断没有读取正确。

fread函数的用法

参考技术A   fread函数可从文件中读取二进制数据。

  语法:

  A=fread(fid,count)

  A=fread(fid,count,precision)

  其中fid为指针所指文件中的当前位置,count指读取的数据个数,precision表示以什么格式的数据类型读取数据。

  fread:从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用count次fgetc),把buffer当作unsignedchar数组并顺序保存结果。流的文件位置指示器前进读取的字节数。

以上是关于fread函数无法正确读取数据的主要内容,如果未能解决你的问题,请参考以下文章

fread()函数第一次读取成功,但第二次读取失败,为啥为啥为啥,

fread()函数如何判断是不是到文件末尾?

php fread()函数读取文本直到文件尾却无法结束

读取大数据集时在 R 3.4 中找不到函数“fread”

使用 fread 函数读取二进制文件的问题

matlab 中关于fread函数的用法