c++ - 如何从 C++ 中的二进制文件中读取类

标签 c++ file binaryfiles

<分区>

我有这段代码应该

<醇>
  • 从用户读取数据到类对象
  • 将该数据写入二进制文件
  • 从二进制文件中读取数据
  • 显示给用户。

  • int main()
    {
        Bahd b;    //Bahd is a class
        cin>>b;    //overloaded insertion operator
        ofstream outfile("Data.bin",ios::out|ios::binary);
        outfile.write(reinterpret_cast<char*>(&b),sizeof(b));
        outfile.close();
        ifstream infile("Data.bin",ios::in|ios::binary);
        Bahd c;
        infile.read(reinterpret_cast<char*>(&c),sizeof(c));
        cout<<c;
    }
    
    但是在运行程序时,在输入数据后出现错误。
    *** Error in `./a.out': munmap_chunk(): invalid pointer: 0x00007ffccbfbca50 ***
    ======= Backtrace: =========
    /usr/lib/libc.so.6(+0x71e75)[0x7fdf6d79ae75]
    /usr/lib/libc.so.6(+0x777c6)[0x7fdf6d7a07c6]
    ./a.out[0x401280]
    ./a.out[0x401156]
    /usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7fdf6d749610]
    ./a.out[0x400e69]
    ======= Memory map: ========
    **more lines here**
    Aborted (core dumped)
    

    这是类

        class Bahd{
        private:
            string name;
            long acc_no;
            long double bal;
        public:
            friend istream& operator >>(istream& src,Bahd& b);
            friend ostream& operator <<(ostream& dest,Bahd& b);
        };
    

    我做错了什么?

    最佳答案

    您不能对 C++ 中的任何非平凡类进行身份序列化(也就是说,假装您正在处理内存中的一些随机字节并四处移动这些字节)。并且您的类中有一个 std::string,这使得它非常重要 - 因为 std::string 是非常重要的。

    相反,您应该适本地序列化它。

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

    相关文章:

    c++ - 变量的多重定义

    java - 以编程方式将类添加到现有 JAR 文件

    python - shutil 和复制文件

    C++ 将 bitset 写入二进制文件

    java - 二进制数据存储方案(保存用户上传的文件)

    c++ - 如果从构造函数/析构函数中不加限定地调用虚函数,是否会发生虚分派(dispatch)?

    c++ - 如何读取字符串中的最后一个字符

    android - 如何通过 Android NDK 编译 C++ 项目

    java - 文件 HashMap <K, V>

    c - 二进制文件读写