結構體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
王海光 閱讀(1863)
評論(0) 編輯 收藏 引用 所屬分類:
MFC