解决方案 »

  1.   

    CString cstr = _T("ABC");
    USES_CONVERSION;
    string str(W2A(cstr));
      

  2.   

    因为CString里是WCHAR
    string里是char
    类型不匹配
      

  3.   

    因为CString实际是CStringT, 也就是模板类, 它在UNICODE环境下, 实际是CStringW, 而在多字符集下是CStringA
    而std::string就是多字符集的.因为你的环境可能是UNICODE的, 所以说实际是CStringW, 要转换成多字符集, 当然就只有转码了.CStringW  ----> std::string  需要使用WideCharToMultiByte 转换成多字符集, 然后再构造std::stringstd::string -----> CStringW就简单了    因为CStringT模板类已经自动做了 char *  到 wchar_t* 的转码.
    CString Str;
    std::string  tStr;
    Str = tStr.c_str();   //注意, CStringT只做了 =号操作符char*到wchar_t*的自动转码.如果你把你的VS环境切换成多字符集, 那就更简单了.
    CString 实际就是CStringA.CStringA ----> std::string  :
    CString Str;
    std::string  tStr = Str;
    std::string -----> CStringA
    std::string  tStr;
    CString Str = tStr.c_str();
      

  4.   

    +1这牵扯到字符集的问题:char/wchar_t如果你的工程是多字符集的,按照你提到的那位网友的说法是正确的
    如果你的工程是Unicode字符集的,必须进行转换才可以(WideCharToMultiByte )
      

  5.   

    3楼上说的很详细了,就是unicode和多字符集的问题你可以改变字符集设置为多字符集,就没困扰了
      

  6.   

    Unicode下,需要将CString -> char*
      

  7.   

    楼主这个问题我正好也碰到了
    主是要VS默认是宽字符造成的。
    我用了如下的办法成功了,也是VS2013,用了网上推荐的办法试了好久发现如下办法可以用:CString filepath;
    USES_CONVERSION;
    string tmpstr(W2A(filepath));   //这个tmpstr 就是转换完成的string对象。我用这个完美解决了我的问题。
    我还用下面的解决了 string 转换为 CString 的问题
    string tmpstr;
    CString tmp1(tmpstr.c_str());以上全部都是在VS 2013里用的。