从std :: string创建CString的C++失败

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每次运行它的值都不同,但长度似乎是不变的.其他一些结果是042219B0042C4378.

我已经尝试了这个线程中讨论的每个变体,结果是一样的.我还试图将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,这也没有帮助.

Yak*_*ont 6

问题是打印不转换.

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.

  • _"转换为CStringA"_ ...或者只是在第一个位置创建一个`CStringA`变量以避免强制转换. (3认同)