CString s1="ad";
char    s2[256];
strcpy(s2,s1);这样做可以吗?安全吗?
更好的方法是怎么样的呢?

解决方案 »

  1.   

    我见过另外一种做法,
    s2[i] = s1[i];
      

  2.   

    你要怎么样安全呢?
    为什么不安全?
    实在不行挨个负值
    for(int i=0;i<str.getlength();i++)
    {
    char[i]=str.get[i];
    }
    char[i]='\0';
    行不行?
      

  3.   

    CString 转char[] 
    char temp[]="2、如何将char数组里的内容copy到CString";
    strcpy(m_chartocstring.GetBuffer(strlen(temp)),temp);
    m_chartocstring.ReleaseBuffer();
    AfxMessageBox("char数组转化为CString!是我亲自写的!",MB_OK);
    UpdateData(0);
      

  4.   

    这样很安全啊,根据实际长度分配空间^_^CString str1="PiggyXP";
    char *str=new char[str.GetLength()+1];
    strcpy(str,str1);
      

  5.   

    如果s1的长度太长会造成溢出,所以安全的方法是在使用strcpy()前先判断一下:          
    CString s1="ad";
    char    s2[256];
    int len1 = s1.GetLength();
    if(len1 <= 256)
    strcpy(s2,s1.GetBuffer(0));
      

  6.   

    strcpy(s2,s1.GetBuffer(s1.GetLength);
    s1.ReleaseBuffer();
      

  7.   

    楼主的方法没什么问题,我一直用的!放心,只要s2[256]够用
    char    s2[256];
    一般不会有问题的。
      

  8.   

    s1.ReleaseBuffer();又做何解?释放?
      

  9.   

    只要没有定义_UNICODE,拷贝不越界,楼主的做法是没什么问题的
      

  10.   

    strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString---->char[]
      

  11.   

    可以try{}
        catch(...){}
      

  12.   

    如果copy的话,建议申明字符串用:
    TCHAR* pBuf;  // 或者用更好的LPTSTR和LPCTSTR,他们其实是TCHAR的指针
    拷贝用 _tcscpy函数,他在ansi,unicode环境下都能很好工作,避免用strcpy.CString str; // 目标字符串
    int _toUse; // 需要使用的字符个数
    LPTSTR tmp = str.GetBufferSetLength(_toUse); // 得到TCHAR*
    // ... 使用
    str.ReleaseBuffer(); // 使用完毕
      

  13.   

    PiggyXP(【小猪】●你快乐于是我快乐
    这样很安全啊,根据实际长度分配空间^_^CString str1="PiggyXP";
    char *str=new char[str.GetLength()+1];
    strcpy(str,str1);
    ============同意小猪猪的方法。
    动态分配空间。
      

  14.   

    不过用完了要释放空间,
    free(str);
      

  15.   

    见过一位前辈这样写的:
    CString str = "Heloo";
    char *chr = new char(str.getLength()+1);
    memcpy(chr,str.getLength()+1,str.getLength()+1);memcpy是不是比strcpy安全?
    学习ing...
      

  16.   

    pengjd(悲酥清风
    memcpy(chr,str.getLength()+1,str.getLength()+1);
    ============================================
    应该是memcpy(chr,str.GetBuffer(str.getLength()),str.getLength()+1);
      

  17.   

    CString str = m_pRs.GetLastErrorString();
    MessageBox(NULL,str,"",0 | 0x00200000L);
    int len = str.GetLength();
    TCHAR* pchar;
    pchar = str.GetBuffer(len + 1);
    str.ReleaseBuffer();
      

  18.   

    一般我是这么用的
    CString to Char:lstrcpy(Char,CString);//char是数组的名字
    Char to CString : CString+=Char;
      

  19.   

    一定要注意是否为UNICODE
    CString s1="ad";
    int len = s1.GetLength();
    char    s2[256];
    memset((void*)s2,0,sizeof(char) * 256);#ifdef _UNICODE
    WideCharToMultiByte(CP_ACP,0,(LPCTSTR)s1,-1,s2,255,NULL,NULL);
    #else
    strcpy(s2,(LPCTSTR)s1);
    #endif
    ...
      

  20.   

    抱歉,修正如下:
    一定要注意是否为UNICODE
    CString s1="ad";
    int len = s1.GetLength();
    char    s2[256];
    memset((void*)s2,0,sizeof(char) * 256);#ifdef _UNICODE
    WideCharToMultiByte(CP_ACP,0,(LPCTSTR)s1,-1,s2,255,NULL,NULL);
    #else
    len = (len < 255)? len : 255;
    strncpy(s2,(LPCTSTR)s1,len);
    #endif
    ...
      

  21.   

    能不能介绍一本VC字符串处理方面比较全面的书籍.你们用的这些在C/C++的书籍里找不到.