Как правильно разыменовать 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!"