结构体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
王海光 阅读(1853)
评论(0) 编辑 收藏 引用 所属分类:
MFC