При использовании кириллических символов мы можем столкнуться с ситуацией, когда вместо кириллических символов отображаются непонятные знаки. Особенно это актуально для ОС Windows. И в этом случае необходимо явным образом задать текущую локаль (культуру) для вывода символов. В Си это делается с помощью функции setlocale(), определение которой имеется в заголовочном файле locale.h.
Итак, изменим код, который использовался в прошлых темах следующим образом:
#include <stdio.h> int main(void) { printf("Привет мир! \n"); return 0; }
Компиляция и запуск в ОС Windows может выглядеть следующим образом:
c:\C>gcc hello.c -o hello & hello ╧ЁштхЄ ьшЁ! c:\C>
Вместо русских слов я получаю непонятные символы, и это не то, что ожидалось. Теперь изменим код, применив функцию setlocale:
#include <stdio.h> #include <locale.h> int main(void) { char *locale = setlocale(LC_ALL, ""); printf("Привет мир! \n"); return 0; }
Поскольку функция setlocale определена в файле locale.h, то он подключается с помощью директивы #include <locale.h>
.
Повторно компилируем и запустим приложение:
c:\C>gcc hello.c -o hello & hello Привет мир! c:\C>
Стоит отметить, что в качестве кодировки текстового файла в этом случае должна использоваться кодировка ANSI или Windows-1251, но не UTF-8.
На некоторых платформах, например, Ubuntu/MacOS, мы можем не столкнуться с подобной проблемой. И в этом случае вызов функции setlocale просто не окажет никакого влияния.