Как именно работать со строками, содержащими кириллицу в C?

Я новичок. Не могу разобраться, как именно работать со строками, содержащими кириллицу в си. Суть в том, что нужно ввести с клавиатуры переменные, содержащие символы русского алфавита, и обработать их в соответствии с условным заданием. Пробовал изучать литературу, касающуюся работы с unsigned char, locale, wchar_t, но безрезультатно.


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

Автор решения: Lebchik

Ты ищёшь не совсем там. unsigned char, wchar_t -- это типы переменных: воспринимай их как инструмент для обработки.

Как заметили в комментариях, для работы с кириллицей, тебе нужно знать используемую кодировку:

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

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

upd: в комментариях намекают, что при обработке символов использовать жёстко определённый размер символа -- не лучшая практика, т.к. размер кодируемого символа может сильно варьироваться.

→ Ссылка