容器如何实现序列化?

downcast 2004-06-11 09:02:30
#include <iostream>
#include <string>
using namespace std;

int main() {
// FILE *fd = fopen("test2.txt", "w+b");
// string s = "123";
// int z = sizeof(s);
// fwrite(&z, sizeof(z), 1, fd);
// fwrite(&s, z, 1, fd);
// fclose(fd);
FILE *fd;
string s;
int z;
fd = fopen("test2.txt", "r+b");
fread(&z, sizeof(z), 1, fd);
cout << z << endl;
fread(&s, z, 1, fd);
fclose(fd);
cout << s << endl;
return 0;
}

把注释去掉可以正常存储,加上注释后无法正确读出,请问如何解决?
...全文
214 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
downcast 2004-06-13
  • 打赏
  • 举报
回复
今天午夜结贴,抓紧时间啊~~
dot99 2004-06-13
  • 打赏
  • 举报
回复
大胆否认一点, 类不可能像struct(只包含数据,没有接口)那样由二进制直接构建(虽然在c++里面struct和class差别不大). 所以我只想到了动态生成~数据格式就自己定义得了
downcast 2004-06-13
  • 打赏
  • 举报
回复
被晾了一天了,怎一个惨字了得…… T_T
downcast 2004-06-12
  • 打赏
  • 举报
回复
嗯,多谢,string的反序列化是知道了,但是其他的容器呢,比如vector, map之类的?反序列化的时候,除了动态生成,还有什么办法?恕小弟愚钝,望众位高手解答
downcast 2004-06-12
  • 打赏
  • 举报
回复
楼上的大哥,能把程序贴出来吗?小弟我想知道的只是容器能否像一般的结构一样从二进制数据中直接构建出来。如果效率上过得去的话,动态生成的方法也行。并想知道这些方法的原理。之前的描述可能不够准确,如引起误解还请多多包涵。
hsz8250 2004-06-12
  • 打赏
  • 举报
回复
我有一个序列化程序,你要吗?
sharkhuang 2004-06-12
  • 打赏
  • 举报
回复
学习CORBA的obj-to-string
dot99 2004-06-11
  • 打赏
  • 举报
回复
仔细看了看http://dev.csdn.net/develop/article/22/22857.shtm
发现还是吸收一下MFC的序列化方法~保存信息以后, 动态生成比较好~~
dot99 2004-06-11
  • 打赏
  • 举报
回复
呵呵~~习惯了老土方法
用下楼上的方法~不错哦~
lsaturn 2004-06-11
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/22/22857.shtm
lsaturn 2004-06-11
  • 打赏
  • 举报
回复
void CMagicList::Save()
{
ofstream ofArchive(m_szOwnPath, ios::binary | std::ios::out);
if(ofArchive == NULL)
{
return;
}
type_MagicMapiter MagicListIter;
type_MagicMap::size_type MapSize = m_MapMagicList.size();
string::size_type StringSize;
sMagicInfo sMagicInfoTemp(0, 0, 0, 0);

ofArchive.write(reinterpret_cast<char *>(&MapSize), sizeof(MapSize));
for(MagicListIter = m_MapMagicList.begin(); MagicListIter != m_MapMagicList.end(); MagicListIter++)
{
StringSize = MagicListIter->first.size();
ofArchive.write(reinterpret_cast<char *>(&StringSize), sizeof(StringSize));
ofArchive.write(MagicListIter->first.c_str(), StringSize + 1);
sMagicInfoTemp = MagicListIter->second;
ofArchive.write(reinterpret_cast<char *>(&sMagicInfoTemp.nLock), sizeof(sMagicInfoTemp.nLock));
ofArchive.write(reinterpret_cast<char *>(&sMagicInfoTemp.nUse), sizeof(sMagicInfoTemp.nUse));
ofArchive.write(reinterpret_cast<char *>(&sMagicInfoTemp.nKey), sizeof(sMagicInfoTemp.nKey));
ofArchive.write(reinterpret_cast<char *>(&sMagicInfoTemp.nJob), sizeof(sMagicInfoTemp.nJob));
}
ofArchive.clear();
ofArchive.close();
}

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧