Jdv*_*Jdv 1 c++ mfc c-strings stdstring visual-studio
在我的基于MFC的应用程序中,此代码:
std::string stdString("MappingName");
std::cout << "as String: " << stdString << std::endl;
CString cString(stdString.c_str());
std::cout << "as CString: " << cString << std::endl;
Run Code Online (Sandbox Code Playgroud)
生成此输出:
as String: MappingName
as CString: 01DEA060
Run Code Online (Sandbox Code Playgroud)
CString每次运行它的值都不同,但长度似乎是不变的.其他一些结果是042219B0和042C4378.
我已经尝试了这个线程中讨论的每个变体,结果是一样的.我还试图将Visual Studio项目中的字符集从使用Unicode字符集更改为使用多字节字符集,同样没有任何效果.
转换失败的原因是什么?
编辑:更多的测试表明,它的价值std::string似乎没有区别:
tmp as String: The quick brown fox jumps over the lazy dog
tmp as CString: 00EAAF88
Run Code Online (Sandbox Code Playgroud)
我还将字符集设置为Not Set,这也没有帮助.
问题是打印不转换.
CString可以扼杀转换为TCHAR const*.在启用unicode的情况下构建时,就是这样wchar_t const*.
std::cout没有wchar_t const*超载<<.它确实有一个void const*过载.
void指针重载以十六进制格式输出指针地址.
CStringA在印刷前铸造:
std::cout << "as CString: " << static_cast<CStringA>(cString) << std::endl;
Run Code Online (Sandbox Code Playgroud)
或使用打印wcout.