Как использовать оператор L на массиве? (C ++, Visual Studio 2019) - PullRequest
0 голосов
/ 01 марта 2020

Часть 2 о кодировании символов в C ++ ( User123 ).

<- Go к предыдущему сообщению. </a>

Я вчера делал какой-то код, и Пол Сандерс в этот вопрос подсказал мне полезное решение: он сказал мне не использовать std::cout << "something"; но использовать std::wcout << L"something";.

Но у меня есть другая проблема. Теперь я хочу сделать что-то вроде этого (некоторые специальные символы, но в массиве):

#include <iostream>
using namespace std;
string myArray[2] = { "łŁšđřžőšě", "×÷¤ßł§ř~ú" };
int main()
{
    cout << myArray[0] << endl << myArray[1];
    return 0;
}

Но теперь я получаю что-то действительно необычное:

│úÜ­°×§Üý
θĄ▀│ž°~˙

Если я добавлю L перед массивом я получаю (Visual Studio 2019):

C++ initialization with '{...}' expected for aggregate object

Как я могу представить эти специальные символы, но в массиве?

1 Ответ

3 голосов
/ 01 марта 2020
#include <iostream>
using namespace std;
wstring myArray[2] = { L"łŁšđřžőšě", L"×÷¤ßł§ř~ú" };
int main()
{
    wcout << myArray[0] << endl << myArray[1];
    return 0;
}

L может применяться только непосредственно к строковым литералам. В результате получается строковый литерал типа wchar_t[] ( ширина символ), а не обычный char_t[] ( узкий символ), поэтому вы не можете сохранить его в string. Вам нужно сохранить его в wstring. И чтобы вывести wstring, вам нужно передать его wcout, а не cout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...