读书人

CString与string转化出现异常

发布时间: 2012-05-08 22:09:41 作者: rapoo

CString与string转化出现错误
在网上搜索了许多关于CString/string之间的转换,使用如下语句:
1.cstr.GetBuffer(cstr.GetLength());
但是运行出现错误:
error C2440: “初始化”: 无法从“wchar_t *”转换为“std::basic_string<_Elem,_Traits,_Ax>”

2.sring a=(char*)(LPCTSTR)cstring;//进行转换后
a只能获得第一个字符,不能达到要求 //但是采用VC6.0编译可以获得整个串

我采用的工具是VS2005.

不是很懂MFC下的CString与wchar_t,还有它们似乎与_T()/L等相关,网上搜索资料如下:
L表示UNICODE串,比如wchar_t* str = L"yangsongx";
_T在ANSI编译模式下表示ANSI串,在UNICODE下表示UNICODE串,比如
TCHAR* str = _T("yangsongx");
在ANSI下编译就是 char* str = "yangsongx";
在UNICODE下编译就是 wchar_t* str = L"yangsongx";

我不是很理解ANSI编译和UNICODE编译这两种形式,可以的话大家也说说这个吧。(因为是新手,分数不多,希望大家能帮助下)

[解决办法]
对于你的应用来说
ANSI和UNICODE的区别就是
ANSI编码CString默认是窄字节的
UNICODE默认是宽字节的
std::string总是窄字节的

所以UNICODE下你要做宽窄字节转换
比如可以这样
USES_CONVERSION;
CString str;
std::string str1 = W2A(str.Getbuffer());
str.ReleaseBuffer();


[解决办法]
用构造函数,参数传由cstring转换来的char* :
sring a( (LPSTR)(LPCTSTR)cstring );
[解决办法]
把工程 改为 ANSI 模式。

读书人网 >VC/MFC

热点推荐