


Жуть какая проблема с Visual Studio.
Это просто пипец.
Есть строка с русской буквой
const char* s = " п";
Размер массива = 4 байта. 1 на пробел, 2 байта на букву `п` и завершающий 0
Visual studio показывает этот размер когда наводишь мышкой на строку.
А вот когда компилируешь прогу, то эта строка превращается в массив из 3х байтов (2буквы и 0). Видимо там происходит какое-то превращение, оптимизация в видовс кодировку. Как её вырубить? Это бред.
Всё работает правильно если использовать char8_t u8
const char8_t* s = u8" п";
Но должно работать и без этого.
Файл с исходным кодом сохранён в UTF-8 with signature
Ваш файл исходного кода сохранён в кодировке UTF-8, которая хранит данные с переменным числом байт на символ. ссылка
Если ввести строку с символами латиницы и кириллицы, то картина проясниться
const char* s = " fп"; // 5 байт
В этом случае среда измеряет не исполняемый код, а размер строки текста в редакторе кода.
>> Размер массива = 4 байта. 1 на пробел, 2 байта на букву п и завершающий 0
Ты в это веруешь?
Покури доки про строковые литералы (в пользуемой версии стандарта) можит в голова проясницо.
Компиляторы давно умеют во время компиляции перекодировать строки.
Гуглите msvc character set.