Top.Mail.Ru
Ответы
Аватар пользователя
1мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Жуть какая проблема с Visual Studio.

Это просто пипец.

Есть строка с русской буквой

1
const char* s = " п";

Размер массива = 4 байта. 1 на пробел, 2 байта на букву `п` и завершающий 0

Visual studio показывает этот размер когда наводишь мышкой на строку.

А вот когда компилируешь прогу, то эта строка превращается в массив из 3х байтов (2буквы и 0). Видимо там происходит какое-то превращение, оптимизация в видовс кодировку. Как её вырубить? Это бред.

Всё работает правильно если использовать char8_t u8

1
const char8_t* s = u8" п";

Но должно работать и без этого.

Файл с исходным кодом сохранён в UTF-8 with signature

По дате
По рейтингу
Аватар пользователя
Высший разум
1мес

Ваш файл исходного кода сохранён в кодировке UTF-8, которая хранит данные с переменным числом байт на символ. ссылка

Если ввести строку с символами латиницы и кириллицы, то картина проясниться

1
const char* s = " fп"; // 5 байт

В этом случае среда измеряет не исполняемый код, а размер строки текста в редакторе кода.

Аватар пользователя
Просветленный
1мес

>> Размер массива = 4 байта. 1 на пробел, 2 байта на букву п и завершающий 0
Ты в это веруешь?
Покури доки про строковые литералы (в пользуемой версии стандарта) можит в голова проясницо.

Аватар пользователя
Гуру
1мес

Компиляторы давно умеют во время компиляции перекодировать строки.

Гуглите msvc character set.