gpt4 book ai didi

c++ - 使用 ofstream 将多个数组指针写入文件?

转载 作者:行者123 更新时间:2023-11-30 04:36:47 24 4
gpt4 key购买 nike

我在将多个数据数组写入文件时遇到了一些非常奇怪的问题。基本上,我想将所有数组大小存储在文件顶部,然后是数组数据。这样我就可以读取大小并使用它来构建数组来保存导入的数据,而且我会确切地知道每个数组的开始和结束位置。

问题是:我写了数据,但导入时不一样。请看看我的小测试代码。底部有关于值的注释。

非常感谢各位程序员! :)

#include <iostream>
#include <fstream>

int main()
{
int jcount = 100, // First item in file
kcount = 200,
in_jcount, // Third item in file. jcount is used to find where this ends.
in_kcount;

float *j = new float[jcount],
*k = new float[kcount],
*in_j,
*in_k;

for(int i = 0; i < jcount; ++i) // Write bologna data...
j[i] = (float)i;
for(int i = 0; i < kcount; ++i)
k[i] = (float)i;

std::ofstream outfile("test.dat");

outfile.write((char*)&jcount, sizeof(int)); // Good
outfile.tellp();

outfile.write((char*)&kcount, sizeof(int)); // Good
outfile.tellp();

outfile.write((char*)j, sizeof(float) * jcount); // I don't know if this works!
outfile.tellp();

outfile.write((char*)k, sizeof(float) * kcount); // I don't know if this works!
outfile.tellp();

outfile.close();


std::ifstream in("test.dat");

in.read((char*)&in_jcount, sizeof(int)); // == jcount == 100, good.
in.read((char*)&in_kcount, sizeof(int)); // == kcount == 200, good.

in_j = new float[in_jcount],
in_k = new float[in_kcount]; // Allocate arrays the exact size of what it should be

in.read((char*)in_j, sizeof(float) * in_jcount); // This is where it goes bad!
in.read((char*)in_k, sizeof(float) * in_kcount);

float jtest_min = j[0], // 0.0
jtest_max = j[jcount - 1], // this is 99.

ktest_min = k[0], // 0.0
ktest_max = k[kcount - 1], // this is 200. Why? It should be 199!

in_jtest_min = in_j[0], // 0.0
in_jtest_max = in_j[in_jcount - 1], // 99

in_ktest_min = in_k[0], // 0.0
in_ktest_max = in_k[in_kcount - 1]; // MIN_FLOAT, should be 199. What is going on here?

in.close();

delete k;
delete j;
delete in_j;
delete in_k;
}

最佳答案

这段代码没有明显的错误(事实上,我没有看到你在尝试运行它时遇到的错误),除了你没有检查打开输入/输出文件的错误。

例如,如果您没有写入“test.dat”的权限,打开将无声地失败,您将读回文件中之前发生的任何内容。

关于c++ - 使用 ofstream 将多个数组指针写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351718/

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