Подтвердить что ты не робот

Как инициализировать и распечатать std:: wstring?

У меня был код:

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

и это сработало нормально. Но теперь моя команда хочет перейти на wstring. Поэтому я попробовал:

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

но это дало мне ошибку компиляции:

Ошибка 1 ошибка C2664: "Станд:: basic_string < _Elem, _Traits, _Ax > :: basic_string (Const std:: basic_string < _Elem, _Traits, _Ax > &) ': не может преобразовать параметр 1 from 'const char [8]' to '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".

Что я делаю неправильно?

4b9b3361

Ответ 1

Для отображения wstring вам также потребуется широкая версия cout-wcout.

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

Ответ 2

Используйте std::wcout вместо std::cout.

Ответ 3

попробуйте использовать std::wcout<<st, он исправит вашу проблему.

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

Ответ 4

Этот ответ относится к тегу "С++/CLI" и связанной с ним консоли Windows С++.

Если у вас есть многобайтовые символы в std:: wstring, необходимо сделать еще две вещи, чтобы заставить его работать:

  • Включить заголовки
    #include <io.h>
    #include <fcntl.h>
  • Установить режим stdout
    _setmode(_fileno(stdout), _O_U16TEXT)

Результат: Многобайтовая консоль