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) | |
Wandelt ein Multibyte-Zeichen, dessen erster Byte auf s zeigt, in ein Wide-Zeichen um, das nach *pwc geschrieben wird, falls pwc nicht null ist.
Wenn s ein Null-Zeiger ist, wird der globale Konvertierungszustand zurückgesetzt und ermittelt, ob Shift-Sequenzen verwendet werden.
Inhalt |
[bearbeiten] Hinweise
Jeder Aufruf von mbtowc aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ mbstate_t, das nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Zustandswechsel verwendet, muss darauf geachtet werden, Rückschritte oder Mehrfachscans zu vermeiden. In jedem Fall sollten mehrere Threads mbtowc nicht ohne Synchronisation aufrufen: mbrtowc kann stattdessen verwendet werden.
[bearbeiten] Parameter
| pwc | - | Zeiger auf das Wide-Zeichen 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 |
[bearbeiten] Rückgabewert
Wenn s kein Null-Zeiger ist, gibt die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder -1, wenn die ersten Bytes, auf die s zeigt, kein gültiges Multibyte-Zeichen bilden, oder 0, wenn s auf das Null-Zeichen '\0' zeigt.
Wenn s ein Null-Zeiger ist, wird sein interner Konvertierungszustand zurückgesetzt, um den anfänglichen Zustandswechsel darzustellen, und es wird 0 zurückgegeben, wenn die aktuelle Multibyte-Kodierung nicht zustandsabhängig ist (keine Shift-Sequenzen verwendet) oder ein Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).
[bearbeiten] 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ß水🍌
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.24.7.2 Die Funktion mbtowc (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.22.7.2 Die Funktion mbtowc (p: 260)
- C11-Standard (ISO/IEC 9899:2011)
- 7.22.7.2 Die Funktion mbtowc (p: 358)
- C99-Standard (ISO/IEC 9899:1999)
- 7.20.7.2 Die Funktion mbtowc (p: 322)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.10.7.2 Die Funktion mbtowc
[bearbeiten] Siehe auch
| (C95) |
konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück (Funktion) | |
| C++ Dokumentation für mbtowc
| |