Как правильно разыменовать const wchar_t*?

Создаю переменную const wchar_t* text = L"Текст";

Пытаюсь ее разыменовать std::cout << *(text); Но на выводе получаю 1057. Не подскажете, почему так? И как тогда правильно разыменовать?

и можно ли как-то установить кодировку, чтобы выводились русские символы?


Ответы (1 шт):

Автор решения: Стас

В вашем случае строка wchar_t это массив, следовательно text - указатель на его первый элемент. Когда вы его разыменовываете, то получаете значение, хранящееся в первой ячейке (char-код первого символа).

Если вам нужно вывести всю строку на консоль, используйте:

std::wcout << text;

Как вывод понимает, что строка закончилась? У массива ведь нельзя узнать длину? В общем, да, но строки это особый случай. Когда вы создаете строку, то она превращается в массив размером количество символов + 1 и на последнем месте ставится \0 (символ с кодом 0). Теперь длину строки можно определить исходя из положения нуль-терминатора (для этого даже есть функция strlen() в библиотеке cstring).


Предлагаю вам подумать, чему будет равняться длина строки (с точки зрения C++)

"Hello\0world!"
→ Ссылка