MFC开发时经常会遇到CString、string/std::string、char*等类型相互转换的问题,现将一些思考与心得记下来与大家分享:
一、CString强制类型转换为const char*,在变量前加上:(char *)(LPCTSTR),这样做虽不会报错,但其转换后的值可能是乱码,不推荐这样做!
二、利用中间变量(string类型),原理:
1)CString类型不能自动装换为const char*。
2)const char*类型可自动装换为CString。
3)std::string类型调用c_str()方法就可轻松转换为const char*。
4)CString与std::string相互转换:
CString cs("Hello");
std::string s((LPCTSTR)cs);
std::string s("Hello");
CString cs(s.c_str());
CString s = _T("abc");
std::string str = CStringA(s);
作者:周星星
链接:https://www.zhihu.com/question/27128092/answer/115797905
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
综上,所以一般需要const char*类型时可用string变量转换,而需要CString类型时则直接用const char*类型赋值。应尽量避免CString转换为const char *的情况!
MFC开发时经常会遇到CString、string/std::string、char*等类型相互转换的问题,现将一些思考与心得记下来与大家分享:
一、CString强制类型转换为const char*,在变量前加上:(char *)(LPCTSTR),这样做虽不会报错,但其转换后的值可能是乱码,不推荐这样做!
二、利用中间变量(string类型),原理:
1)CString类型不能自动装换为const char*。
2)const char*类型可自动装换为CString。
3)std::string类型调用c_str()方法就可轻松转换为const char*。
4)CString与std::string相互转换:
CString cs("Hello");
std::string s((LPCTSTR)cs);
std::string s("Hello");
CString cs(s.c_str());
CString s = _T("abc");
std::string str = CStringA(s);
作者:周星星
链接:https://www.zhihu.com/question/27128092/answer/115797905
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
综上,所以一般需要const char*类型时可用string变量转换,而需要CString类型时则直接用const char*类型赋值。应尽量避免CString转换为const char *的情况!