在 C++ 中使用指针将对象写入文件

write an object to a file using pointer in c++

我有这个对象 ob,我正在使用指向该对象的指针将其写入文件。但是好像没有效果。

class A
{
public:
    int Arr[10];
    A();
};
A::A()
{
    for(int i=0;i<10;i++)
        Arr[i] = 0;
}
A obj;
int main(int argc, char *argv[])
{
    A *ptr = &obj, temp;
    obj.Arr[0] = 1;

    fstream fp("temp", ios::in|ios::binary|ios::out);
    fp.write((char *)ptr, sizeof(*ptr));
    fp.close();

    fp.open("temp", ios::in|ios::binary|ios::out);
    fp.read((char *)&temp, sizeof(temp));
    for(int i=0;i<10;i++)
        cout<<temp.Arr[i]<<" ";
    fp.close();
    return 0;
}

输出:

0 0 0 0 0 0 0 0 0 0

预期输出:

1 0 0 0 0 0 0 0 0 0

如何使用指针直接写入对象。还有有什么方法可以直接读取指针本身的内容吗?

您两次打开文件进行阅读 (std::ios::in)。打开文件读取时,文件必须存在,否则打开会失败,也就是说第一次打开不成功,所以文件没有创建。

第二次打开也会因为文件丢失而失败。

因此,请始终检查打开文件是否真的成功并使用正确的打开模式:

#include <fstream>
#include <iostream>
class A {
public:
    int Arr[10]{};

    void print() const {
        for(int val : Arr) std::cout << val << ' ';
        std::cout << '\n';
    }
};

int main() {
    A obj;
    A temp;
    obj.Arr[0] = 1;

    // open file for writing and check that opening succeeded
    if(std::ofstream fp("temp", std::ios::binary); fp) {
        obj.print();
        fp.write(reinterpret_cast<const char*>(&obj), sizeof(obj));
    }

    // open the file for reading and check that opening succeeded
    if(std::ifstream fp("temp", std::ios::binary); fp) {
        fp.read(reinterpret_cast<char*>(&temp), sizeof(temp));
        temp.print();
    }
}