Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c+中的指针将对象写入文件+;_C++_Class_Object_Pointers_File Handling - Fatal编程技术网

C++ 使用c+中的指针将对象写入文件+;

C++ 使用c+中的指针将对象写入文件+;,c++,class,object,pointers,file-handling,C++,Class,Object,Pointers,File Handling,我有一个对象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 f

我有一个对象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;
}
预期产出:

1 0 0 0 0 0 0 0 0 0

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

您可以同时打开文件进行读取(
std::ios::in
)。当您打开文件进行读取时,它必须存在,否则打开它将失败,这意味着您的第一次打开没有成功,因此不会创建该文件

由于缺少文件,第二次打开也将失败

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

#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();
    }
}
#包括
#包括
甲级{
公众:
int-Arr[10]{};
void print()常量{

用于(内部值:Arr)STD: C++:学习一些基本的调试技巧永远都不早。对于初学者来说,检查文件的二进制内容。这至少会告诉你问题是从文件中写入,还是从文件中读取。一旦你知道问题所在,你就有了一个调查的开始点。
ios::trunc
标志?问题出在我第一次打开文件进行写入的那一行。由于文件不存在,我们不应该通过
ios::in
flag@PulkitBhatnagar我应该说得更清楚些。你打开了文件,读写两遍。这就是我的意思“当您第一次打开文件进行读取时”。
#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();
    }
}