我定义了一个结构
struct ME_REFRESH
{
SOCKET Handle; //当前连接的socket
CString hostname; //当前机器名称
};
让后定义了一个结构变量
ME_REFRESH lpmerefresh;
然后赋值
CString strHostname="123456";
memset(LPVOID(&lpmerefresh),0,sizeof(ME_REFRESH) );
lpmerefresh.Handle=Handle;
lpmerefresh.hostname=strHostname;为什么在程序运行时,语句lpmerefresh.hostname=strHostname;会出错呢?
struct ME_REFRESH
{
SOCKET Handle; //当前连接的socket
CString hostname; //当前机器名称
};
让后定义了一个结构变量
ME_REFRESH lpmerefresh;
然后赋值
CString strHostname="123456";
memset(LPVOID(&lpmerefresh),0,sizeof(ME_REFRESH) );
lpmerefresh.Handle=Handle;
lpmerefresh.hostname=strHostname;为什么在程序运行时,语句lpmerefresh.hostname=strHostname;会出错呢?
解决方案 »
- CoInitialize和CoUninitialize问题,是不是每次都调用?
- 在对话框应用程序中,对话框上包含多个控件,当鼠标点击某一控件便执行一段代码!
- com参数传递问题
- 如何CBitmapButton类的按钮响应mousemove(当鼠标进入按钮区域时按钮的图片改变
- 又是关于ActiveX控件下载的问题,希望大家都来讨论一下!!!!
- 如何设计多种语言版本的系统?
- 如何使用CSocketFile传送文件!
- Wireshark有没有三方开发接口?不谈lua
- 看到一则关于“兼职打字”的骗局解密(CSDN上这种骗子最近流行)
- 关于古老的DDE通信的几个头痛的问题.
- 在debug下调试,运行通过的程序,为什么在release编译时下总是说有错??
- 高手请进,急急急!!!
ME_REFRESH *lpmerefresh; CString strHostname="123456";
lpmerefresh=new ME_REFRESH;
lpmerefresh->Handle=handle;
lpmerefresh->hostname=strHostname;
上面的大哥说错了,这句话出错不是因为memset不知道
怎样给CString分配内存空间。
因为上面那条语句是用来清0的,而CString内部的所并不只是一些数据而已,
不能简单清0的。
昨天研究了一天 CString, 很復雜的東西。
CString name;时
编译器会在栈里分配一块内存空间,然后调用CString的默认构造函数初始化name,此时Cstring内部的m_pchData指向一个空字串"",而不是NULL,
cstring在结构里也是一样的,结构无论是从栈中分配如
ME_REFRESH lpmerefresh
或从堆中分配
lpmerefresh=new ME_REFRESH;
type为cstring的分量都会被调用默认构造函数初始化name,使Cstring内部的m_pchData指向一个空字串"",该空字串是afxEmptyString的m_pchData你memset,该m_pchData便指向了NULL,那么就表明该CString的值被破坏了,所以报错,注意空的Cstring的m_pchData指向一个空字串"",而不是NULL所以问题就出在你的memset上
to leojay(leojay)memset是用来清0的,没错但是对象本身内部有什么呢?从c++对象模型上来说,对象本身占用的空间有以下三部分
1.对象内部所有非静态成员的大小总和 A
2.对象内部所有非静态成员之间的padding(对齐开销) B
3.虚函数和虚继承的开销 C对象的大小就是 A+B+C;memset是用来清0的,而object内部的所并不只是一些数据而已(没错)
但cstring 的大小就是sizeof(m_pchData), 在32位机上,四字节对齐时就是4 byte。
所以你说的也不完全正确CString这个类其实并不难用,大家回去trace一下,多写程序
to xhncmecx(毛刚)
>>奇怪,我在结构中声明一个CString 对象,根本就没法编译过, 是不是在结构体中无法声明一个对象????? 头文件没有包含正确,
to all:
推荐大家看看 Effective C++,More E C++, Inside C++ Object Model这几本述