1 string --> CString
在使用MFC时,遇到了CString与string转换的问题,特此记录下来。其实CString与string的转换方式有挺多种的,但也并不是每一种都适用,可能需要一些稍微的改动才能正常运行。
std::string str3 = "你好呀! hello 123 ";
CString CStr = str3.c_str();
比如网上常见的一种转换方法(如果你的能直接转换也是没问题滴):

发现转不了,就很气。提示错误翻译一下大概就是说:没有合适的构造函数来进行那个类型的转换。
提示错误为:
no suitable constructor exists to convert from “const char *” to “ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t,
ATL::ChTraitsCRT<wchar_t>>>” ,
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2440 “初始化”: 无法从“const _Elem *”转换为“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”
MFCApplication1 D:\Projects\MFC\MFCApplication1\MFCApplication1\MFCApplication1Dlg.cpp 610
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0415 不存在从 "const char *" 转换到 "ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>"
的适当构造函数 MFCApplication1 D:\Projects\MFC\MFCApplication1\MFCApplication1\MFCApplication1Dlg.cpp 610
为什么呢?原因就是CString c_name = name.c_str();其实是需要调用拷贝构造函数的,但是类型不匹配,所以找不到合适的构造函数。
1.1 Unicode编码下
1.1.1 方法1:ATL字符串转换宏
该方法是比较通用的,通过使用ATL字符串转换宏。
std::string str1 = "hello !";
std::string str2 = "你好!";
std::string str3 = "你好呀! hello 123 ";
CString CStr,cstr1, cstr2, cstr3;
cstr1 = CA2T(str1.c_str()); //所以CA2T也就是CA2W就是将多字符集转换为宽字符UNICODE,也可写成CA2W。
cstr2 = CA2T(str2.c_str());
cstr3 = CA2W(str3.c_str());//写成CA2W,试试看
CStr = cstr1 + "\r\n" + cstr2 + "\r\n" + cstr3;
AfxMessageBox(CStr);

cstr1 = CA2T(str1.c_str()); //所以CA2T也就是CA2W就是将多字符集转换为宽字符UNICODE,也可写成CA2W。
1.1.2 方法2:调用“赋值运算符重载” (区别于直接赋值)
修改编码可能导致程序中其它地方出现错误(我的就是- -!)。所以可以调用“赋值运算符重载”的方式来完成转换,很简单也很实用。不用修改编码方式。
std::string str3 = "你好呀! hello 123 ";
CString CStr;
CStr = str3.c_str();//注意这里使用的是 =运算符的重载,注意与直接赋值的区别
AfxMessageBox(CStr);

注意二者区别,定义时,直接赋值,是不行的。

混合字符串
std::string str1 = "hello !";
std::string str2 = "你好!";
std::string str3 = "你好呀! hello 123 ";
CString CStr,cstr1, cstr2, cstr3;
cstr1 = str1.c_str();
cstr2 = str2.c_str();
cstr3 = str3.c_str();
CStr = cstr1 + "\r\n" + cstr2 + "\r\n" + cstr3;
AfxMessageBox(CStr);

这种方式在 Unicode编码、多字节编码 下通用
1.1.3 自己封装函数 Str2Cstr(string str)
也可以直接写个函数用:
CString Str2Cstr(string str)
{
return CString

最低0.47元/天 解锁文章
1215

被折叠的 条评论
为什么被折叠?



