对话框类:
class CMyDlg : public CDialog

   CString m_str1;
   Cstring m_str2;
   void ff();
........

构造函数中:
m_str1 = _T("");
m_str2 = _T("");CMyDlg ::ff()
{
  UpadateData(true);
  CString str;
  char ss[]="ABC";
  memcpy(str.GetBuffer(0),ss.strlen(ss));
  //断点Q
}问题:
   调用ff时m_str1、m_str2仍为空;
   此时在断点Q处查看,发现m_str1、m_str2和str都为“ABC";
   这三个字符串的缓冲区地址居然一样;
   当将CString str;改为CString str(”123");
   m_str1、m_str2缓冲区地址居然一样;但str和他们不一样;困惑不解,匪夷所思;

解决方案 »

  1.   

    CString未赋值
    然后缓冲区是固定随机的吧
      

  2.   

    不要用memcpy了
    用CString.Format("%s",ss);吧
      

  3.   

    UpadateData(true);//是不是你的m_str1与m_str2和控件相连呀
      

  4.   

    str.GetBuffer()的内容不要修改!否则非常容易出错误!
    str赋值成空的的话,给str的buf申请的空间有限,你这样直接拷贝的话出错几乎是肯定的
    你应该让str=ss;让系统自己分配内存CString是存在问题的,微软承认
      

  5.   

    foxmail(萧遥 www.LoveSnow.com) 的方法不错:用str.Format("%s",ss);后果然系统重新分配了str缓冲区地址:
      

  6.   

    CString 其实可以理解为一个复合结构指针,如果你在分配一个指针的时候,如果没有对该指针赋值的话,指针所指的地址也是一样的,同理,你用CString定义变量, a,b,c……  无论你定义多少,只要初始化不赋值的话,它们的地址都是一个!!!
      

  7.   

    操作一个类时用它的成员函数,不要又搬出memcpy
    要搞出一个错误还不简单吗