gpt4 book ai didi

c++ - fread 在空值处终止中间读取。还读取超过预期数据的垃圾

转载 作者:行者123 更新时间:2023-11-28 03:59:32 25 4
gpt4 key购买 nike

我正在使用 C++ 中的 FILE 对象读取二进制文件的片段。这是 fseek 和相应的 fread 调用:

fseek(fp, startLocation, SEEK_SET);
fread(data, m_sizeOfData, 1, fp);

m_sizeOfData 最终是一个大于 40 万的整数。看起来它应该将二进制文件中的所有 400,000+ 字节读入数据(顺便说一下,这是一个 char[m_sizeOfData]),但是它在一个看起来像一个盒子的 unicode 字符处大约 6 或 7 个字符后停止。我在想它可能代表一个空终止?我对此并不乐观。我正在阅读的每个文件都不是这种情况。大多数似乎(通常)正常工作。

为什么会这样,有没有办法正确读取所有数据?

编辑:

fp 是这样定义的:

FILE* fp;
_wfopen_s(&fp, L"C://somedata.dat", L"rb");

这个十六进制的方框字符是 0x06 后跟 0x00。
数据定义为:char *data = new char[m_sizeOfData];

编辑 2:

我还注意到另一个文件的末尾加载了一些垃圾。垃圾看起来像:

ýýýý««««««««îþ

这是因为它试图完成某个轮数的字节吗?

最佳答案

您错误地使用了 fread 的计数/大小参数。由于您正在读取字节,因此第二个参数应为 1,第三个参数为计数:

fread(data, 1, m_sizeOfData, fp);

然后您可以使用 fread 的返回值来确定读取了多少字节。如果您得到预期的返回计数,那么您可以放心,您正在读取您想要的所有数据。在这种情况下,您可能错误地输出了数据——如果您将其视为以 NUL 结尾的字符串,那么您看到的 0x00 将是打印内容的结尾。 0x06 可能是方框字形。

关于c++ - fread 在空值处终止中间读取。还读取超过预期数据的垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com