【发布时间】:2023-08-21 23:22:01
【问题描述】:
我创建了一个简单的程序,它将对象写入文件,然后读回写入文件的内容。我的问题是,当我写入文件时,不需要的值被写入文件,当我检索数据时,这些值也被检索到,这是我不想要的。
这是我所做的:
文件处理实现
//File Handling class Implementation
File::File(){}
string File::writeObject(Person obj)
{
ofstream outFile("myFile.txt", ios::out);
if( !outFile ) {
cout << "No File" << endl;
}
outFile.write( reinterpret_cast<const char *> (&obj), sizeof(obj) );
return "Done";
}
人.H:
//Person.H
class Person {
private: string name;
public: Person();
public: void setName(string name);
public: string getName();
};
主要实现: 使用命名空间标准;
int main( int argc, char* argv[] )
{
Person p1;
p1.setName("Shehan");
File f1;
cout << f1.writeObject(p1) << endl; //writes to the file
ifstream readFile("myfile.txt",ios::in); creates object to read from file
string name; // creates variable to hold the value
readFile >> name; reads from file
cout << name << endl; //prints the value
system("pause");
return 0;
}
我认为应该只将“shehan”写入文件,但写入文件的内容是:
0ÂÒ Shehan ÌÌÌÌÌ'þ¨
当我再次阅读时:
这里似乎有什么问题?
【问题讨论】:
-
您正在写出非 POD 对象的内容。这包括对象和它的子对象的所有成员变量。当这些成员变量之一是指针时,您认为会发生什么?
-
实际上并没有把你带到那里。
-
@Shehan.W 他试图指出一个对象的内部表示是不是文本,或者任何你可以重新阅读和利用的东西。想一想:一个有 1000 个字符的
std::string仍然只有一个远远少于 100 个字符的sizeof。这些字符在哪里?
标签: c++ serialization fstream ifstream ofstream