我定义了一个结构
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;会出错呢?

解决方案 »

  1.   

    你改成下面的程序就对了
    ME_REFRESH *lpmerefresh;    CString strHostname="123456";
    lpmerefresh=new ME_REFRESH;
    lpmerefresh->Handle=handle;
    lpmerefresh->hostname=strHostname;
      

  2.   

    因为memset不知道怎样给CString类分配内存空间
      

  3.   

    memset(LPVOID(&lpmerefresh),0,sizeof(ME_REFRESH) );
    上面的大哥说错了,这句话出错不是因为memset不知道
    怎样给CString分配内存空间。
    因为上面那条语句是用来清0的,而CString内部的所并不只是一些数据而已,
    不能简单清0的。
      

  4.   

    CString内部有一项数据是它真正存放字符串的首地址,把它清0了肯定不行了。
      

  5.   

    memset(LPVOID(&lpmerefresh),0,sizeof(lpmerefresh.Handle));
      

  6.   

    memset(LPVOID(&lpmerefresh),0,sizeof(SOCKET));
      

  7.   

    嗯,是這樣。
    昨天研究了一天 CString, 很復雜的東西。
      

  8.   

    奇怪,我在结构中声明一个CString 对象,根本就没法编译过, 是不是在结构体中无法声明一个对象?????
      

  9.   

    to xhncmecx: 结构体中可以申明对象,还可以定义函数等等。在C++中struct与class很相似,不同的是struct中成员缺省是public的,而class中成员缺省是private的。
      

  10.   

    当你定义一个局部变量
    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这几本述