我做了几遍,都是复制整个子符串。
真奇怪。
CString Drive;
Drive.GetBuffer(3); 
Drive.Format("%s",m_Dir.Left(m_Dir.Find(":",1)+1));  
TRACE("Drive=%s\n\r",Drive);

解决方案 »

  1.   

    CString Drive;
    Drive = m_Dir.Left(m_Dir.Find(":",1)+1);  
    TRACE("Drive=%s\n\r",Drive);
      

  2.   

    CString如果象你所说的那么难用,还叫CString么?
      

  3.   

    CString str1, str2;
    str1 = _T("abcdefg");
    str2 = str1.Left(2);
    str2值为"ab"
      

  4.   

    CString Drive;
    Drive.GetBuffer(3); //这是什么意思?
    Drive.Format("%s",m_Dir.Left(m_Dir.Find(":",1)+1));  
    TRACE("Drive=%s\n\r",Drive);==========================================CString Drive;
    Drive.Format("%s",(LPCTSTR)m_Dir.Left(m_Dir.Find(":",1)+1));  
    TRACE("Drive=%s\n\r",(LPCTSTR)Drive);
      

  5.   

    问题在于m_Dir也是一个CString变量。
    赋值给其他CString变量后,就把整个子符串复制过去了。
    Left没有任何作用。
    不信试试看。
      

  6.   

    在 Debug版正确,release就出错了。char Drive[4];
    strcpy(Drive,(LPCTSTR)m_Dir.Left(3));  
    Drive[3]='\0';
      

  7.   

    char Drive[4];
    CString str = m_Dir.Left(3);  
    memcpy(Drive,(LPCTSTR)str, 3 );
    Drive[3]='\0';
      

  8.   

    char Drive[4];
    strcpy(Drive, m_Dir.Left(3));  
    Drive[3]='\0';
      

  9.   

    strcpy这种函数都需要以‘\0’结束的字符串的支持,
    一般推荐用memcpy