把一个char型的数组直接转成CString类对象怎么转?char c[100];//假设里面已经有了内容
CString cs = (CString *)c;
这样用会不会有问题?

解决方案 »

  1.   

    会...
    因为类型不一样.你写的是指针类型...呵呵.直接就拿指针初始化CString s就可以的.
    VC6.0下.
    CString s=new CString(c);
      

  2.   

    char c[100];//假设里面已经有了内容
    CString cs = c; // 这样是可以的注意c必须是一个字符串,也就是说必须包含'\0'。
      

  3.   

    直接 cs=c 应该就可以了.
      

  4.   

    谢谢大家,那这样可以吗?strncpy(cs.GetBuffer(),c,100);
      

  5.   

    ....
    目标区域有足够的位置装吗?
    为什么写些奇怪的代码...闷...
    CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,
    而你直接获得它的buffer,来复制东西.  就会出问题的..使用CString 的方法不好吗??
    CString的构造函数有,
    CString(LPCSTR lpch, int nLength);可以指定长度..
    LPCSTR就是const char *
      

  6.   

    ....
    目标区域有足够的位置装吗?
    为什么写些奇怪的代码...闷...
    CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,
    而你直接获得它的buffer,来复制东西.  就会出问题的..///???
    strncpy(cs.GetBuffer(100),c,100);这样不就有了吗?这样并不奇怪,很容易读懂.
      

  7.   

    直接CString cs = c或者CString cs(c);就可以了(推荐)。
    如果你非要用GetBuffer(),那么分为两种情况:
    1、如果只是字符串复制
    strcpy(cs.GetBuffer(100),c);
    cs.ReleaseBuffer(); //忘了这个问题就严重了
    2、如果是固定长度的内存复制
    strncpy(cs.GetBuffer(100),c,100);
    cs.ReleaseBuffer(100); //这样要自己指定长度。/********************************/
    另外VC6.0下CString s=new CString(c)这个能通过编译?
    VC6也太强了吧?怎么看也要CString s=*(new CString(c))才行!
    不过就算可以通过编译,也不要这样搞,有内存泄露!
      

  8.   

    LZ问了一个我思考了很久而又老是忘记提问的问题
    感谢LZ!!!
    感谢大家!!!
      

  9.   

    回复w_anthony() 写错了.
    ~ hehe  那当然通不过编译了..
      

  10.   

    char c[100];//假设里面已经有了内容
    CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00
      

  11.   

    char c[100];//假设里面已经有了内容
    CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00
    =======================================================
    cs从c[0]开始copy,一直到0x00出现为止。因此c的中间是可以出现0x00的。一旦0x00出现在中间,那么0x00之后的内容便被忽略。
      

  12.   

    strcpy(cs.GetBuffer(100),c);
    //cs内容随后保持不变的话,不用调用ReleaseBuffer()
    cs.ReleaseBuffer();
      

  13.   

    直接用=就行了,CString重载了=运算符