gpt4 book ai didi

c++ - 从 C++ 二进制文件中读取返回错误值

转载 作者:行者123 更新时间:2023-11-28 00:16:32 26 4
gpt4 key购买 nike

我正在尝试使用 stdio.h 读取一些 bool 网格并将其写入文件。用户输入一个数字nx(一般从1到10),程序通过ceil(nx/2)生成一个nx的列表 bool 网格(ceil(nx/2)ny)。网格本身存储在 __int64 中,因此此网格(f 为假且 T 为真):

ffTT
fTfT

将是 172 (10101100)。

最后的网格列表输出到一个二进制文件。

我的代码:

std::vector<__int64> grids;

...

FILE *cFile;
if (fopen_s(&cFile, ("grid_" + std::to_string(nx) + "_c.bin").c_str(), "wb") != 0) return;

for (int i = 0; i < grids.size(); i++) {
fwrite(&grids[i], (int) ceil((nx * ny) / 8), 1, cFile);
}

fclose(cFile);

这部分工作正常。


但是,当我尝试从文件中读取时,所有网格都是 -858993460,无论大小如何,尽管它得到的网格数是正确的。我的阅读代码:

FILE *cFile;
if (fopen_s(&cFile, ("grid_" + std::to_string(nx) + "_c.bin").c_str(), "rb") != 0) return;

fseek(cFile, 0, SEEK_END);
long size = ftell(cFile);

int grids = size / ((nx * ny) / 8);

for (int n = 0; n < shapes; n++) {
__int64 data;
fread(&data, (int) ceil((nx * ny) / 8), 1, cFile);
printf("%i\n", data);
}

fclose(cFile);

我做错了什么?


如果您需要更多信息来回答,请发表评论,我会提供给您。

提前致谢!

最佳答案

问题

问题是您正在使用以下方法将 FILE* 移动到文件末尾:

fseek(cFile, 0, SEEK_END);

然后,您尝试在不返回文件开头的情况下读取数据。

您没有检查以下的返回值:

fread(&data, (int) ceil((nx * ny) / 8), 1, cFile);

检查读取是否成功。

修复

添加行

fseek(cFile, 0, SEEK_SET);

倒回文件。

始终检查读取操作的返回值。

if ( fread(&data, (int) ceil((nx * ny) / 8), 1, cFile) == 1 )
{
// Successful read.
// Use the data
}

关于c++ - 从 C++ 二进制文件中读取返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953910/

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