c++ - 从二进制文件中读取对象

标签 c++ file binary

我写了一个程序,让你输入有关汽车的信息,然后将对象写入二进制文件。

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/

相关文章:

c++ - Visual Studio 版本之间的库 ABI 兼容性

c++ - 如何在Visual Studio中链接库

ajax - 如何在 Laravel 中读取 FormData 对象

python - Python 2 和 3 中的字符串到字节

python - 查找范围内的数字二等分python

c++ - 字符串到两个数字

C++ 对象指针静态列表和内存泄漏

string - Go:将 rune (字符串)转换为二进制的字符串表示形式

php - 如何在不知道文件扩展名的情况下按其名称取消链接()?

file - 从 Groovy 中的资源获取 File 对象的最短方法