【发布时间】:2016-12-03 03:28:29
【问题描述】:
我遇到了一个课程,我们使用了一个名为“Person”的用户定义类型,它将一个人的姓名存储在一个 char 数组中,并将年龄存储为一个整数。课程是关于写入和读取二进制文件的。主程序如下所示:
int main()
{
Person anil("anil",24); //initialize with name and age
fstream file("person.bin", ios::binary | ios::in | ios::out | ios::trunc);
if (!file.is_open())
cout << "Error while opening file.";
else
{
file.write((char*)&anil, sizeof(Person));
file.seekg(0); // go back to beginning
Person anjali; //declare new person object
//first argument is memory block, second argument is byte size
file.read((char*)&anjali, sizeof(Person));
anil.whoAreYou(); //outputs the name and age
anjali.whoAreYou();
}
return 0;
}
我不明白这些行发生了什么:
file.write((char*)&anil, sizeof(Person));
file.read((char*)&anjali, sizeof(Person));
我知道 fstream 的写入和读取功能需要 memory_block 作为第一个参数...有人可以解释当对用户定义类型的引用转换为 char * 时到底发生了什么?
【问题讨论】:
-
将内存转储到磁盘并认为以后有希望工作可能是个坏主意。这可能包含指针或结构,如
std::string,将数据存储在其他地方。尝试编写一个正确的序列化方法为operator<<,这样你就可以做到file << anil。 -
课程是关于写入和读取二进制文件的。 -- 啊哈!这个糟糕的“教训”在哪里教?我问这个,因为这里必须有成千上万的帖子,发帖人写的代码完全像这样,并且无法理解为什么他们的程序不起作用。我推测有人、某本书或某个网站正在将这些信息提供给新手 C++ 编码人员。
-
我觉得这是不好的做法。
标签: c++ binaryfiles file-writing file-read