setlocale
| Definiert im Header <locale.h> |
||
| char* setlocale( int category, const char* locale ); |
||
Die Funktion setlocale installiert die angegebene Systemlokalisierung oder einen Teil davon als neue C-Lokalisierung. Die Änderungen bleiben bestehen und beeinflussen die Ausführung aller lokalisierungsabhängigen C-Bibliotheksfunktionen bis zum nächsten Aufruf von setlocale. Wenn locale ein Nullzeiger ist, fragt setlocale die aktuelle C-Lokalisierung ab, ohne sie zu ändern.
Inhalt |
[edit] Parameter
| category | - | locale Kategoriebezeichner, eine der LC_xxx Makros. Kann null sein. |
| locale | - | Systemspezifischer Lokalisierungsbezeichner. Kann "" für die vom Benutzer bevorzugte Lokalisierung oder "C" für die minimale Lokalisierung sein. |
[edit] Rückgabewert
Zeiger auf eine schmale, nullterminierte Zeichenkette, die die C-Lokalisierung nach Anwendung der Änderungen identifiziert, oder null bei einem Fehler.
Eine Kopie der zurückgegebenen Zeichenkette kann zusammen mit der für diesen Aufruf von setlocale verwendeten Kategorie später im Programm verwendet werden, um die Lokalisierung wieder auf den Zustand am Ende dieses Aufrufs zurückzusetzen.
[edit] Hinweise
Beim Programmstart wird das Äquivalent von setlocale(LC_ALL, "C"); ausgeführt, bevor Benutzercode ausgeführt wird.
Obwohl der Rückgabetyp char* ist, ist die Änderung der Zeigerzeichen undefiniertes Verhalten.
Da setlocale den globalen Zustand ändert, der die Ausführung lokalisierungsabhängiger Funktionen beeinflusst, ist es undefiniertes Verhalten, es von einem Thread aus aufzurufen, während ein anderer Thread eine der folgenden Funktionen ausführt: 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 definiert auch eine Lokalisierung namens "POSIX", die immer zugänglich ist und exakt der Standard-minimalen "C"-Lokalisierung entspricht.
POSIX gibt auch an, dass der zurückgegebene Zeiger, nicht nur der Inhalt der Zeichenkette, auf die er zeigt, durch nachfolgende Aufrufe von setlocale ungültig werden kann.
[edit] Beispiel
#include <locale.h> #include <stdio.h> #include <time.h> #include <wchar.h> int main(void) { // the C locale will be UTF-8 enabled English; // decimal dot will be German // date and time formatting will be Japanese 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); }
Mögliche Ausgabe
Number: 3,14 Date: 月曜日 2017年09月25日 13時00分15秒
[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.11.1.1 Die Funktion setlocale (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.11.1.1 Die Funktion setlocale (S. 163-164)
- C11-Standard (ISO/IEC 9899:2011)
- 7.11.1.1 Die Funktion setlocale (S. 224-225)
- C99-Standard (ISO/IEC 9899:1999)
- 7.11.1.1 Die Funktion setlocale (S. 205-206)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.4.1.1 Die Funktion setlocale
[edit] Siehe auch
| Lokalisierungskategorien für setlocale (Makrokonstante) | |
| C++ Dokumentation für setlocale
| |
[edit] Externe Links
| 1. | Liste der Windows-Lokalisierungsnamen. |
| 2. | Liste der Linux-Lokalisierungsnamen. |