Как именно работать со строками, содержащими кириллицу в C?
Я новичок. Не могу разобраться, как именно работать со строками, содержащими кириллицу в си. Суть в том, что нужно ввести с клавиатуры переменные, содержащие символы русского алфавита, и обработать их в соответствии с условным заданием. Пробовал изучать литературу, касающуюся работы с unsigned char
, locale
, wchar_t
, но безрезультатно.
Ответы (1 шт):
Ты ищёшь не совсем там. unsigned char
, wchar_t
-- это типы переменных: воспринимай их как инструмент для обработки.
Как заметили в комментариях, для работы с кириллицей, тебе нужно знать используемую кодировку:
- Если ты пишешь под
ОС Windows
, то вводимые тобой с клавиатуры символы, скорее всего, будут относиться кcp866
. Все символы в ней, включая кириллицу, имеют длину 1 байт. Потому, тебе подойдёт типunsigned char
(именно беззнаковый, т.к. знаковый может игнорировать верхний бит 7 в значении, из-за чего символы кириллицы могут восприниматься как символы ASCII). Для обработки символов тебе пригодится таблица символов этой кодировки. - Если же ты пишешь под
ОС Linux
, то твоя программа, скорее всего, будет получать символы кодировкиUTF-8
(зависит от конфигурации, лучше проверить). Кириллица, используемая в современном русском языке, кодируется в UTF-8 двумя байтами (устаревшие символы, вроде [ять], могут кодироваться большим числом байтов), потому типunsigned char
тебе не подойдёт -- требуется двубайтовый беззнаковый тип. Например,unsigned short
(также требует перепроверки).
В любом случае, твой вопрос касается кодировки, а не типа переменной.
upd: в комментариях намекают, что при обработке символов использовать жёстко определённый размер символа -- не лучшая практика, т.к. размер кодируемого символа может сильно варьироваться.