关于结构体存入到文件和从文件中读取的有关问题-

关于结构体存入到文件和从文件中读取的问题-!!
我定义了一个结构体   类型如下:
struct   FRIENDINFO{
CString   m_strName;
                CString   m_strID;
};

我要把它存入到文件中去,然后读取到结构体中:
FRIENDINFO   friendinfo;
friendinfo.strName   =   m_strName;
friendinfo.strId   =   str;

FILE   *pf;
pf   =   fopen( "FRIENDINFO.fi ", "ab ");
fwrite(&friendinfo,sizeof(struct   FRIENDINFO),1,pf);
fclose(pf);
//m_strName   和m_strID   是两个与编辑框相关联的CString类对象;

问题是在生成的FRIENDINFO.fi文件里都是乱码,也不能读到另一个FRIENDINFO结构体中去;我觉得是因为CString类型的大小没有固定的原因,我把结构体中的两个成员改成int   就没错误;但是在这里我想从编辑框得到一串文本好像只能用CString,情大家给我想想办法,谢谢各位了!!

另外我加上读取的代码:
FRIENDINFO   friendinfo;

FILE   *pf;
pf   =   fopen( "FRIENDINFO.fi ", "rb ");
fread(&friendinfo,sizeof(struct   FRIENDINFO),1,pf);
fclose(pf);

------解决方案--------------------
问题出在这里sizeof(struct FRIENDINFO),你看看大小就知道了,最好写文件的时候注明这个字符串的长度,这样读写才能保证正确
------解决方案--------------------
楼上说的对,根本没得到真实数据的大小.
如果长度是有限制的,你就声明为数组,如
struct FRIENDINFO{
char[256] m_szName;
char[32] m_szID;
};

如是长度不固定,可以将成员变量的数据长度写入文件,再写入数据,读的时候,先读数据长度,再读出这么长的数据,进行赋值就行了。