我写了一个程序,它让你输入有关汽车的信息,然后将对象写入二进制文件。
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();
}
它工作正常,但前提是我的二进制文件中有三个或更少的对象。当三个以上的字段时,它将其余字段显示为空字段。好像第三辆车之后没有通道。为什么会这样,我能做些什么呢?
我觉得接近解决方案,但我的知识有限。提前谢谢你!
不,你不能这样做,read((char *)obj,sizeof(obj)),因为程序中的每个对象都有自己的内存地址,由系统分配。 您无法读取地址from file .如果你的对象只包含数据,它可以正常工作,但如果它的元素是一个对象,并且它本身属性相关的内存地址或迭代器(相关的内存地址)。它的工作失败。