如何初始化和打印 std::wstring?

新手上路,请多包涵

我有代码:

 std::string st = "SomeText";
...
std::cout << st;

效果很好。但现在我的团队想搬到 wstring 。所以我尝试了:

 std::wstring st = "SomeText";
...
std::cout << st;

但这给了我一个编译错误:

错误 1 错误 C2664: ‘std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)’ : 无法将参数 1 从 ‘const char [8]’ 转换为’const std::basic_string<_Elem,_Traits,_Ax> &’ D:…\TestModule1.cpp 28 1 TestModule1

在网上搜索后,我读到我应该将其定义为:

 std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;

这编译但打印 "0000000000012342" 而不是 "SomeText"

我究竟做错了什么 ?

原文由 Roee Gavirel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

要显示 wstring,您还需要一个宽版本的 cout - wcout。

 std::wstring st = L"SomeText";
...
std::wcout << st;

原文由 Bo Persson 发布,翻译遵循 CC BY-SA 3.0 许可协议

此答案适用于“C++/CLI”标签和相关的 Windows C++ 控制台。

如果您在 std::wstring 中有多字节字符,则还需要做两件事才能使其工作:

  1. 包括标题

#include <io.h>

#include <fcntl.h> 2. 设置标准输出模式

_setmode(_fileno(stdout), _O_U16TEXT)

结果: 多字节控制台

原文由 Val 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏