std:: setlocale
|
Definiert in Header
<clocale>
|
||
|
char
*
setlocale
(
int
category,
const
char
*
locale
)
;
|
||
Die
setlocale
-Funktion installiert das angegebene Systemgebietsschema oder einen Teil davon als neues C-Gebietsschema. Die Änderungen bleiben wirksam und beeinflussen die Ausführung aller gebietsschemaabhängigen C-Bibliotheksfunktionen bis zum nächsten Aufruf von
setlocale
. Wenn
locale
ein Nullzeiger ist,
setlocale
fragt das aktuelle C-Gebietsschema ab, ohne es zu modifizieren.
Inhaltsverzeichnis |
Parameter
| Kategorie | - |
Lokalisierungs-Kategoriekennung, eine der
LC_xxx
Makros. Kann
0
sein.
|
| Locale | - | Systemspezifische Lokalisierungskennung. Kann "" für die benutzerpräferierte Locale oder "C" für die minimale Locale sein |
Rückgabewert
Zeiger auf eine schmale nullterminierte Zeichenkette, die die C-Locale nach Anwendung der Änderungen (falls vorhanden) identifiziert, oder Nullzeiger bei Fehlschlag.
Eine Kopie der zurückgegebenen Zeichenkette zusammen mit der in diesem Aufruf von
std::setlocale
verwendeten Kategorie kann später im Programm verwendet werden, um das Gebietsschema auf den Zustand am Ende dieses Aufrufs zurückzusetzen.
Hinweise
Während des Programmstarts wird das Äquivalent von std :: setlocale ( LC_ALL , "C" ) ; ausgeführt, bevor jeglicher Benutzercode läuft.
Obwohl der Rückgabetyp char * ist, ist das Modifizieren der gezeigten Zeichen undefiniertes Verhalten.
Da
setlocale
globalen Zustand verändert, der die Ausführung von lokalabhängigen Funktionen beeinflusst, ist es undefiniertes Verhalten, es von einem Thread aus aufzurufen, während ein anderer Thread eine der folgenden Funktionen ausführt:
std::fprintf
,
std::isprint
,
std::iswdigit
,
std::localeconv
,
std::tolower
,
std::fscanf
,
std::ispunct
,
std::iswgraph
,
std::mblen
,
std::toupper
,
std::isalnum
,
std::isspace
,
std::iswlower
,
std::mbstowcs
,
std::towlower
,
std::isalpha
,
std::isupper
,
std::iswprint
,
std::mbtowc
,
std::towupper
,
std::isblank
,
std::iswalnum
,
std::iswpunct
,
std::setlocale
,
std::wcscoll
,
std::iscntrl
,
std::iswalpha
,
std::iswspace
,
std::strcoll
,
std::wcstod
,
std::isdigit
,
std::iswblank
,
std::iswupper
,
std::strerror
,
std::wcstombs
,
std::isgraph
,
std::iswcntrl
,
std::iswxdigit
,
std::strtod
,
std::wcsxfrm
,
std::islower
,
std::iswctype
,
std::isxdigit
.
POSIX definiert ebenfalls ein Locale namens "POSIX" , das immer verfügbar ist und exakt dem standardmäßigen minimalen "C" -Locale entspricht.
POSIX legt ebenfalls fest, dass der zurückgegebene Zeiger, nicht nur der Inhalt der Zeichenkette, auf die gezeigt wird, durch nachfolgende Aufrufe von
setlocale
ungültig werden kann.
Beispiel
#include <clocale> #include <cstdio> #include <ctime> #include <cwchar> #include <iterator> #include <string> int main() { // Erstelle eine "tiefe Kopie" des aktuellen Gebietsschemanamens. std::string prev_loc = std::setlocale(LC_ALL, nullptr); // Das C-Gebietsschema wird UTF-8-fähiges Englisch sein, // Dezimaltrennzeichen wird deutsch sein, // Datums- und Zeitformatierung wird japanisch sein. if (const char* loc = std::setlocale(LC_ALL, "en_US.UTF-8")) std::wprintf(L"New LC_ALL locale: %s\n", loc); if (const char* loc = std::setlocale(LC_NUMERIC, "de_DE.UTF-8")) std::wprintf(L"New LC_NUMERIC locale: %s\n", loc); if (const char* loc = std::setlocale(LC_TIME, "ja_JP.UTF-8")) std::wprintf(L"New LC_TIME locale: %s\n", loc); wchar_t buf[100]; std::time_t t = std::time(nullptr); std::wcsftime(buf, std::size(buf), L"%A %c", std::localtime(&t)); std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, buf); // Stelle das vorherige Gebietsschema wieder her. if (const char* loc = std::setlocale(LC_ALL, prev_loc.c_str())) std::wprintf(L"Restorred LC_ALL locale: %s\n", loc); }
Mögliche Ausgabe:
New LC_ALL locale: en_US.UTF-8 New LC_NUMERIC locale: de_DE.UTF-8 New LC_TIME locale: ja_JP.UTF-8 Number: 3,14 Date: 日曜日 2022年11月06日 20時40分59秒 Restorred LC_ALL locale: C
Siehe auch
|
Gebietsschema-Kategorien für
std::setlocale
(Makrokonstante) |
|
|
Satz polymorpher Facetten, die kulturelle Unterschiede kapseln
(Klasse) |
|
|
C-Dokumentation
für
setlocale
|
|
Externe Links
| 1. | Liste der Windows-Gebietsschemanamen . |
| 2. | Liste der Linux-Gebietsschemanamen . |