(C++) CString转string 怎么转!VS2005!!爆头了要!找了几天了都

来源:百度知道 编辑:UC知道 时间:2024/05/22 00:37:30
--------------------------------------------------------------------
CString wo("xxxxcc");
string s;
s=wo.GetBuffer();
//失败了!!!
//错误信息
1>f:\c++试验\count_machine\count_machine\count_machinedlg.cpp(185) : error C2679: 二进制“=”: 没有找到接受“wchar_t *”类型的右操作数的运算符(或没有可接受的转换)
1> f:\vs 2005 主程序目录\vc\include\xstring(875): 可能是“std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const std::basic_string<_Elem,_Traits,_Ax> &)”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> f:\vs 2005 主程序目录\vc\include\xstring(880): 或“std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const _Elem *)”
1> with
1>

1.string s = (LPCTSTR)str;
2.char *chr=new char[wo.GetLength()]
WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);
string str=chr;
3.#include<stdlib.h> #include<tchar.h> _T("dsfds");
这三种方法都试试我就不信没一个成的

错误的原因错误信息已经说明了,CString缓冲区的字符串采用的是UNICODE的占16位的字符,而string中的是占8位的ANSI标准字符。
有2个方法解决:
1、使用转换函数
char *chr=new char[wo.GetLength()]
WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);
string str=chr;

2、推荐你使用string的宽字符版本wstring,它的成员函数和string几乎一模一样,你肯定会使用
wstring str=wo.GetLength();

CString str = "fdjfdas";
string s = (LPCTSTR)str;

CString cs;
char s[1000];
strcpy(s,(LPCTSTR)cs);
CString cs;
char s[1000];
strcpy(s,(LPCTSTR)cs);

CString cs;
char s[1000];
strcpy(s,(LPCTSTR)cs);