C++ 使用c+中的指针将对象写入文件+;
我有一个对象ob,我正在使用指向该对象的指针将其写入文件。但它似乎不起作用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
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();
}
}