mbtowc
|
Definiert im Header
<stdlib.h>
|
||
|
int
mbtowc
(
wchar_t
*
pwc,
const
char
*
s,
size_t
n
)
|
(bis C99) | |
|
int
mbtowc
(
wchar_t
*
restrict
pwc,
const
char
*
restrict
s,
size_t
n
)
|
(seit C99) | |
Konvertiert ein Multibyte-Zeichen, dessen erstes Byte durch s gezeigt wird, in ein Wide Character, geschrieben nach * pwc falls pwc nicht null ist.
Wenn s ein Nullzeiger ist, setzt es den globalen Konvertierungszustand zurück und bestimmt, ob Schiebesequenzen verwendet werden.
Inhaltsverzeichnis |
Hinweise
Jeder Aufruf von
mbtowc
aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ
mbstate_t
, der nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Schaltzustände verwendet, muss darauf geachtet werden, Backtracking oder mehrfaches Scannen zu vermeiden. In jedem Fall sollten mehrere Threads
mbtowc
nicht ohne Synchronisierung aufrufen:
mbrtowc
kann stattdessen verwendet werden.
Parameter
| pwc | - | Zeiger auf das Breitzeichen für die Ausgabe |
| s | - | Zeiger auf das Multibyte-Zeichen |
| n | - | Grenze für die Anzahl der Bytes in s, die untersucht werden können |
Rückgabewert
Wenn s kein Nullzeiger ist, gibt die Funktion die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder - 1 falls die ersten von s gezeigten Bytes kein gültiges Multibyte-Zeichen bilden, oder 0 falls s auf das Nullzeichen ' \0 ' zeigt.
Wenn s ein Nullzeiger ist, setzt es seinen internen Konvertierungszustand zurück, um den anfänglichen Shift-Zustand darzustellen, und gibt 0 zurück, wenn die aktuelle Multibyte-Kodierung zustandsunabhängig ist (keine Shift-Sequenzen verwendet), oder einen Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).
Beispiel
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> // print multibyte string to wide-oriented stdout // equivalent to wprintf(L"%s\n", ptr); void print_mb(const char* ptr) { mbtowc(NULL, NULL, 0); // reset the conversion state const char* end = ptr + strlen(ptr); int ret = 0; for (wchar_t wc; (ret = mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret) wprintf(L"%lc", wc); wprintf(L"\n"); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding print_mb("z\u00df\u6c34\U0001F34C"); // or "zß水🍌" }
Ausgabe:
zß水🍌
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.24.7.2 Die mbtowc-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.22.7.2 Die mbtowc-Funktion (S: 260)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.22.7.2 Die mbtowc-Funktion (S. 358)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.20.7.2 Die mbtowc-Funktion (S. 322)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.10.7.2 Die mbtowc-Funktion
Siehe auch
|
(C95)
|
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion) |
|
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion) |
|
|
C++ documentation
für
mbtowc
|
|