结构体成员变量怎样使用动态字符串数组?

yiluqingfeng 2009-08-27 05:56:37
我建了一个结构体:
struct SaveMsg
{
char RemoteNumb[20];
char sender[20];
char Reciver[20];
CTime Time;
char Msg[1000];

SaveMsg();
~SaveMsg();
};
在使用时,为这些成员变量附上值,并将此结构体使用CFile写入文件,但是这样写生成的文件很快会变得太大,因为这些变量的值都是不定长,所以想将字符串数组改成动态的,但是如果改成如下这样:
struct SaveMsg
{
char *RemoteNumb;
char *sender;
char *Reciver;
CTime Time;
char *Msg;
SaveMsg();
~SaveMsg();
}; 那怎样赋值?怎样写入文件并取出呢?
...全文
212 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
vercitti 2009-09-01
  • 打赏
  • 举报
回复
1、创建构造体实例的时候计算一下实际需要的大小
2、申请计算出来的大小的空间(malloc/new)
3、使用你的构造体指针指向申请空间对应的位置(offset)

这样就是可变的了

如果不想数据凑在一起、
就分开malloc/new
yiluqingfeng 2009-09-01
  • 打赏
  • 举报
回复
还有人会吗???
lanlingmeijiu 2009-09-01
  • 打赏
  • 举报
回复
把结构体力的char改成string类型 然后对string类型序列化 如下:
struct ss
{
int m_i;
CString m_t1;
CString m_t2;
void Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar<<m_i;
ar<<m_t1;
ar<<m_t2;
}
else
{
ar>>m_i;
ar>>m_t1;
ar>>m_t2;
}
}
};
CFile file("1.txt",CFile::ModeCreate|CFile::modeReadWrite);
CArchive ar(&file,CArchive::store);
SS s;
s.m_i=2
s.m_t1="sdf";
s.m_t2="asdasd";
s.Serialize(ar);
ar.close();
/*load
CFile file("1.txt",CFile::modeReadWrite);
Carchive ar(&file,Carchive::load);
SS s;
s.Serialize(ar);
ar.close();
*/
Carmack Jiang 2009-08-31
  • 打赏
  • 举报
回复
使用mfc的CStringArray
yiluqingfeng 2009-08-31
  • 打赏
  • 举报
回复
向all请教
arthur____ 2009-08-28
  • 打赏
  • 举报
回复
你是用。操作符吗。
我想你试下指针->操作符吧。
我是这样理解你的贴子的。
fishion 2009-08-28
  • 打赏
  • 举报
回复
CString str = "test"//multi-byte character
CString str = _T("test")//unicode character
yiluqingfeng 2009-08-28
  • 打赏
  • 举报
回复
可是我使用CString,在赋值的时候就会出错,为什么呢
deng335995 2009-08-28
  • 打赏
  • 举报
回复
用CString 好了,在MFC中很少用char RemoteNumb[20]; 这种了.
蒋晟 2009-08-28
  • 打赏
  • 举报
回复
去看看CString::Serialize
QQ_456 2009-08-27
  • 打赏
  • 举报
回复
up
野男孩 2009-08-27
  • 打赏
  • 举报
回复
序列化的问题啊。
MoXiaoRab 2009-08-27
  • 打赏
  • 举报
回复
用指针还麻烦些呢,你填值还得new 呢。写的时候是一样写

建议用BSTR
feilinhe 2009-08-27
  • 打赏
  • 举报
回复
SaveMsg 构造函数里最好把字符串变量指针赋值为0
直接使用就是了
oyljerry 2009-08-27
  • 打赏
  • 举报
回复
用MFC的CString或者stl的string
雪影 2009-08-27
  • 打赏
  • 举报
回复
楼主是有MFC吗?
如是的话,使用CString
wu_qing_yun 2009-08-27
  • 打赏
  • 举报
回复
一个道理啊,楼主
senr0816 2009-08-27
  • 打赏
  • 举报
回复
不是一样的么?
char *RemoteNumb;
char *sender;
char *Reciver;
char *Msg; 都是可以用像cin >> RemoteNumb来赋值的,直接输入字符串就行了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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