为什么
CString tmp;
strcpy((char*)(LPCSTR)tmp,"sfsjffsj");
这个是正确的呢???
他的形式不是和以下情况一样吗?
char* tmp;
strcpy(tmp,"ksfkjskfsk");
但是这个却是错误的,内存没有分配。
谁说一下CString的内存分配机制???

解决方案 »

  1.   

    (char*)(LPCSTR)tmp 完成了强制类型转换所以可以。
      

  2.   

    上面错了。
    char* tmp 没有分配存储空间就使用了,所以不对。
      

  3.   

    CString tmp;
    strcpy((char*)(LPCSTR)tmp,"sfsjffsj");这句因该这样用
    tmp = "sfsjffsj" 或 tmp.Format(....)
      

  4.   

    to guoxiny:我不是为了赋值,只是不明白为什么
    CString tmp;
    strcpy((char*)(LPCSTR)tmp,"sfsjffsj");
    这个是对的,因为(char*)(LPCSTR)tmp根本就没有分配空间???????
      

  5.   

    两种不一样的
    形如:
    CString tmp(_T(""));
    strcpy(tmp.GetBuffer(0),"sfsjffsj");
    tmp.ReleaseBuffer
    char *szTemp = NULL;
    szTemp = new char[100];& szTemp =new char;
    strcpy(szTemp,"sfsjffsj")
    delete ....;
      

  6.   

    很简单的一个问题呀。
    CString 是一个类,构造函数会自动分配内存并初始化
    char *  只是一个简单的指针而已,当然不能不初始化而直接使用。