★关于结构体的序列化与反序列化问题
程序:
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
typedef struct
{
int size; //数据域的大小
void *data; //数据域的内容
}DBT;
int main()
{
ofstream f("dat.bin", ios::out | ios::binary );
ifstream in("dat.bin", ios::in | ios::binary);
if(!in || !f)
{
cerr << "!! unable to open file.\n";
return -1;
}
char name[] = "hello-world!";
DBT db1,db2;
db1.data = name;
db1.size = strlen(name);
//将db1.size 和db1.data依次写入文件,
f.write(reinterpret_cast<const char *>(&db1.size), sizeof(int));
f.flush();
cout << "db1.size: " << db1.size << endl;
f.write(reinterpret_cast<const char *>(db1.data), db1.size);
f.flush();
f.close();
//依次读取文件内容到db2.size 和db2.data
in.read(reinterpret_cast<char *>(&db2.size),sizeof(int));
in.read(reinterpret_cast<char *>(db2.data), db2.size);
cout<<"db2.size = " <<db2.size << "\n"
<<"db2.data = " <<(reinterpret_cast<char *>(db2.data)) <<endl;
in.close();
cin.get();
return 0;
}
输出结果:
db1.size: 12
db2.size = 12
db2.data =
然后就会弹出"应用程序错误: "0x004242e0"指令引用的"0xcccccccc"内存.该内存不能为"read".
VC 6下编译
请问怎么样才能正确的把db1.data中的内容正确的读出来 ?