setlocale
|
Определено в заголовочном файле
<locale.h>
|
||
|
char
*
setlocale
(
int
category,
const
char
*
locale
)
;
|
||
Функция
setlocale
устанавливает указанную системную локаль или её часть в качестве новой C-локали. Изменения остаются в силе и влияют на выполнение всех функций стандартной библиотеки C, чувствительных к локали, до следующего вызова
setlocale
. Если
locale
является нулевым указателем,
setlocale
запрашивает текущую C-локаль без её изменения.
Содержание |
Параметры
| category | - |
идентификатор категории локали, один из макросов
LC_xxx
. Может быть null.
|
| 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 <locale.h> #include <stdio.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秒
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.11.1.1 Функция setlocale (стр.: TBD)
- Стандарт 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
(макроконстанты) |
|
|
C++ документация
для
setlocale
|
|
Внешние ссылки
| 1. | Список названий локалей Windows . |
| 2. | Список названий локалей Linux . |