我正在使用C++中的FILE对象读取二进制文件的碎片。这里是fseek和相应的fread调用:fread以null值终止中间读取。同时在垃圾中读取预期数据
fseek(fp, startLocation, SEEK_SET);
fread(data, m_sizeOfData, 1, fp);
m_sizeOfData结束是一个大于400的整数。看起来,它应该从二进制文件读取全部40万个字节的数据(顺便说一下,它是一个char [m_sizeOfData]),但是它在一个unicode字符上大约6或7个字符后停止,它看起来像一个盒子。我在想这可能代表无效终止?我对此并不积极。对于我正在阅读的每一个文件,情况并非如此。大多数人似乎都能正常工作(通常)。
为什么会这样,有没有办法正确读取所有的数据?
编辑:
FP被定义为这样:
FILE* fp;
_wfopen_s(&fp, L"C://somedata.dat", L"rb");
该框字符,十六进制,是0×06,随后为0x00。数据的定义方式如下:char * data = new char [m_sizeOfData];
编辑2:
我也注意到,另一个文件是有一些垃圾装到它的结束。垃圾的样子:
YYYY««««««««ITH
这是因为它试图完成字节一定回合数?
fread返回什么值?即:如果你说'size_t num_read = fread(...);'在这之后是什么num_read? – 2009-10-09 03:46:26
num_read返回1 – Chris 2009-10-09 03:47:36
垃圾可能是未初始化的内存。检查camh的答案。 – 2009-10-09 14:33:25