我写了一个程序,让你输入有关汽车的信息,然后将对象写入二进制文件。
Car car_obj; std::ofstream entr; std::ifstream ex;
void save_data() {
entr.open("main.bin", std::ios::app | std::ios::binary);
car_obj.setInfo(); entr.write((char*)&car_obj, sizeof (car_obj));
entr.close();
在此之后,我有一个函数正在读取这个二进制文件,以显示所有油耗低于用户输入的汽车(数字是函数参数中的事实)。
void vehicles_under_factr(float factr) {
ex.open("main.bin", std::ios::app | std::ios::binary);
while (ex.read((char*)&car_obj, sizeof (car_obj)) && !ex.eof()) {
if (car_obj.fuel_cons < factr) {
car_obj.displayInfo();
}
}
ex.close();
它工作正常,但前提是我的二进制文件中有三个或更少的对象。当超过三个时,它将其余显示为空字段。好像第三辆车之后就没有 channel 了。为什么会这样,我该怎么办?
我觉得很接近解决方案,但我的知识有限。提前致谢!
最佳答案
不,你不能这样做,read((char *)obj, sizeof(obj)),因为程序中的每个对象都有自己的内存地址,由系统分配。你看不懂地址 来自文件。如果你的对象只包含数据,它工作正常,但如果它的元素是一个对象并且它本身属性相关的内存地址或迭代器(相关内存地址)。它工作失败。
关于c++ - 从二进制文件中读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829002/