CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

我把一个结构体写入文件,为什么读出来就成了乱码啦?

楼主SauMa(笨笨)2002-01-31 10:27:34 在 VC/MFC / 基础类 提问

结构体是这样的:  
  struct   infor  
  {  
        CString   name;  
        int           age;  
        int           classes;  
  }  
  infor   *myinfor   =   new   infor;  
  CFile       myfile;  
   
  写入过程:  
  myfile.Write(myinfor,sizeof(infor));  
   
  读过程:  
  myfilr.Read(myinfor,sizeof(infor));  
   
  等我在读的时候,读出来的结构体内部变量的int型都是正确,但是CString就成了乱码了,这是怎么回事啊? 问题点数:20、回复次数:9Top

1 楼mensong(吉他乐手)回复于 2002-01-31 10:30:55 得分 0

老兄,你的语言设定没有设为中文吧?Top

2 楼SauMa(笨笨)回复于 2002-01-31 10:32:24 得分 0

我写入得是英文Top

3 楼eion(那个谁)回复于 2002-01-31 10:43:09 得分 10

废话  
  你看看CString的定义,里面有  
   
  LPTSTR   m_pchData;       //   pointer   to   ref   counted   string   data  
   
  也就是说它是用指针来保存数据的,  
  你直接记录结构体的内容是没有任何意义的【存储的是地址的值,不是数据内容】  
  所以因该将CString的内容读出来再写,或者用CString的operator<<Top

4 楼eion(那个谁)回复于 2002-01-31 10:45:32 得分 0

struct   CStringData  
  {  
          long   nRefs;                           //   reference   count  
          int   nDataLength;                 //   length   of   data   (including   terminator)  
          int   nAllocLength;               //   length   of   allocation  
          //   TCHAR   data[nAllocLength]  
   
          TCHAR*   data()                       //   TCHAR*   to   managed   data  
                  {   return   (TCHAR*)(this+1);   }  
  };  
   
   
  class   CString  
  {  
  .......................  
  protected:  
          LPTSTR   m_pchData;       //   pointer   to   ref   counted   string   data  
   
          //   implementation   helpers  
          CStringData*   GetData()   const;  
  ................  
  }Top

5 楼SauMa(笨笨)回复于 2002-01-31 11:01:49 得分 0

那我要怎么办咧?Top

6 楼bskay() bskay() bskay()回复于 2002-01-31 11:35:26 得分 10

CString   name;的问题   (它相当于   char*)  
   
  应该用   char   数组  
   
  你的struct包含CString   对象  
  而你的写入过程:  
  myfile.Write(myinfor,sizeof(infor));总是写入了   char*   的地址而非char*   所指的内容   :)  
   
  读过程:  
  myfile.Read(myinfor,sizeof(infor));当然就不对了  
   
  可以用OOP的方法  
  struct   sInformation  
  {  
      CString   _strName;  
      int         _nAge;  
      int         _nClasses;  
      void   ReadFromFile(CFile&   file);  
      void   Write2File((CFile&   file);  
  };  
  写入过程:  
  myinfor.Write2File(myfile);  
   
  读过程:  
  myinfor.ReadFromFile(myfile);  
   
   
  sInformation::ReadFromFile(CFile&   file)  
  {  
  ...  
  }  
  sInformation::Write2File((CFile&   file);  
  {  
  ...  
  };  
  Top

7 楼eion(那个谁)回复于 2002-01-31 16:04:43 得分 0

write:  
          CString   s="abcsdfasfas";  
          int   len   =   strlen((char*)s);  
          fwrite(&len,sizeof(int),....);  
          fwrite(s.GetBuffer(len),len,.....);  
   
  read:  
          char   buf[1024];  
          int   len=0;  
          fread(&len,sizeof(int),.....);  
          if(   len>0   )   fread(buf,len,....);  
          buf[len]=0;  
          CString   s   =   buf;  
  .....................Top

8 楼SauMa(笨笨)回复于 2002-01-31 17:20:48 得分 0

多谢各位,我找到方法了!Top

9 楼zyoujie()回复于 2002-01-31 17:38:23 得分 0

恭喜Top

相关问题

  • 结构体写入文件的问题
  • 写入文件的数据,打开是乱码,怎么办???
  • 为什么写入文件以后还支是乱码?
  • java中写入文件时中文变成乱码,怎么办啊?
  • 为什么我写入文件是乱码?谁能帮帮我啊?
  • 关于 writeFile , 我写入到文件中的 文本内容都成了乱码
  • StreamwWrite.write方法写入文本到CSV文件时乱码,如何解决?
  • 一个简短的文件写入问题,写入的怎么是乱码呢???今晚等
  • 文件写入
  • 如何往文件中写入结构化数据??

关键词

  • infor
  • 乱码
  • 结构
  • 数据
  • 内容
  • 写入
  • myinfor
  • 结构体
  • 成了乱码
  • cstring

得分解答快速导航

  • 帖主:SauMa
  • eion
  • bskay

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo