面对现实,超越自己
逆水行舟,不进则退
posts - 269,comments - 32,trackbacks - 0

结构体CString问题

1 struct sTest
2 {
3     CString addr;
4     int port;
5 };

     定义CString addr时,编译器会在栈里分配一块内存空间,然后调用CString的默认构造函数初始化addr,此时Cstring内部的m_pchData指向一个空字串 " ",而不是NULL。cstring在结构里也是一样的,结构无论是从栈中分配如 :
     ME_REFRESH   lpmerefresh
     或从堆中分配 :  
     lpmerefresh=new   ME_REFRESH;
     type为cstring的分量都会被调用默认构造函数初始化name,使Cstring内部的m_pchData指向一个空字串 " ",该空字串是afxEmptyString的m_pchData。memset CString时,该m_pchData便指向了NULL,那么就表明该CString的值被破坏了,所以报错。
     结构体成员如果仅仅是基本类型成员可以直接memset(ST,0,sizeof(ST)),但结构体里面包含有指针,直接memset是不行的,因为指针成员的sizeof都是4字节。你应该专门对指针成员进行memset,sizeof对于包含指针的结构获得的长度不是你想要的。

posted on 2012-04-24 13:56 王海光 阅读(1606) 评论(0)  编辑 收藏 引用 所属分类: MFC

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理