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

时间:2012-01-09 11:56:49

标签: c++ c++-cli wstring

我有代码:

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

并且工作正常。但是现在我的团队希望转移到wstring。 所以我试过了:

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

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

  

错误1错误C2664:   “的std :: basic_string的&LT; _Elem,_Traits,_AX&GT; :: basic_string的(常量   的std :: basic_string的&LT; _Elem,_Traits,_AX&GT; &amp;)':无法转换参数1   从'const char [8]'到'const std :: basic_string&lt; _Elem,_Traits,_Ax&gt;   &安培;” D:... \ TestModule1.cpp 28 1 TestModule1

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

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

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

我做错了什么?

4 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:11)

使用std::wcout代替std::cout

答案 2 :(得分:8)

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

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

  1. 包含标题
    #include <io.h>
    #include <fcntl.h>
  2. 设置标准输出模式
    _setmode(_fileno(stdout), _O_U16TEXT)
  3. 结果: Multi-bytes console

答案 3 :(得分:6)

尝试使用std::wcout<<st它会解决您的问题。

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