close
Пространства имён
Варианты
Действия

setlocale

Материал из cppreference.com
< c | locale
<tbody> </tbody>
Определено в заголовочном файле <locale.h>
char* setlocale( int category, const char* locale );

Функция setlocale устанавливает указанную системную локаль или её часть в качестве новой локали C. Изменения остаются в действии и влияют на выполнение всех библиотечных функций C, зависящих от локали, до следующего вызова setlocale. Если locale нулевой указатель, setlocale запрашивает текущую локаль C без её изменения.

Параметры

category идентификатор категории локали, один из макросов LC_xxx. Может быть нулевым.
locale зависящий от системы идентификатор локали. Может быть "" для предпочитаемой пользователем локали или "C" для минимальной локали

Возвращаемое значение

указатель на узкую нуль-терминированную строку, обозначающую локаль C после применения изменений, если такие были, или нулевой указатель при неудаче.

Копия возвращаемой строки вместе с категорией, используемые в этом вызове setlocale, могут использоваться позже в программе для восстановления локали в исходное состояние в конце этого вызова.

Замечания

Во время старта программы перед выполнением любого кода пользователя выполняется вызов, эквивалентный setlocale(LC_ALL, "C");.

Хотя возвращаемый тип char*, изменение символов по указателю является неопределённым поведением.

Поскольку setlocale изменяет глобальное состояние, которое влияет на выполнение зависящих от локали функций, вызов из потока является неопределённым поведением, пока другой поток выполняет любую из следующих функций: fprintf, isprint, iswdigit, localeconv, tolower, fscanf, ispunct, iswgraph, mblen, toupper, isalnum, isspace, iswlower, mbstowcs, towlower, isalpha, isupper, iswprint, mbtowc, towupper, isblank, iswalnum, iswpunct, setlocale, wcscoll, iscntrl, iswalpha, iswspace, strcoll, wcstod, isdigit, iswblank, iswupper, strerror, wcstombs, isgraph, iswcntrl, iswxdigit, strtod, wcsxfrm, islower, iswctype, isxdigit.

POSIX также определяет локаль с именем "POSIX", которая всегда доступна и в точности эквивалентна минимальной локали по умолчанию "C".

POSIX также специфицирует, что возвращаемый указатель, а не только содержимое строки по этому указателю, может быть аннулирован последующими вызовами setlocale.

Пример

#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <wchar.h>
 
int main(void)
{
    // локаль C будет английская UTF-8;
    // разделитель целой и дробной части будет немецкий
    // формат даты и времени будет японский
    setlocale(LC_ALL, "en_US.UTF-8");
    setlocale(LC_NUMERIC, "de_DE.utf8");
    setlocale(LC_TIME, "ja_JP.utf8");
 
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L"%A %c", localtime(&t));
    wprintf(L"Number: %.2f\nDate: %ls\n", 3.14, str);
}

Возможный вывод:

Number: 3,14
Date: 月曜日 2017年09月25日 13時00分15秒

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.11.1.1 Функция setlocale (стр. 163-164)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.11.1.1 Функция setlocale (стр. 224-225)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.11.1.1 Функция setlocale (стр. 205-206)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.4.1.1 Функция setlocale

См. также

категории локалей для setlocale
(макроконстанта) [править]