mbrlen
Von cppreference.com
| Definiert in Header <wchar.h> |
||
| (seit C95) (bis C99) |
||
| (seit C99) | ||
Bestimmt die Größe der Darstellung eines Multibyte-Zeichens in Bytes.
Diese Funktion ist äquivalent zum Aufruf mbrtowc(NULL, s, n, ps ? ps : &internal) für ein verstecktes Objekt internal vom Typ mbstate_t, mit der Ausnahme, dass der Ausdruck ps nur einmal ausgewertet wird.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf ein Element eines Multibyte-Zeichenstrings |
| n | - | Grenze für die Anzahl der Bytes in s, die untersucht werden können |
| ps | - | Zeiger auf die Variable, die den Konvertierungsstatus speichert |
[edit] Rückgabewert
Das erste der folgenden zutreffenden Elemente
- 0, wenn die nächsten n oder weniger Bytes das Nullzeichen vervollständigen oder wenn s ein Nullzeiger ist. In beiden Fällen wird der Konvertierungsstatus zurückgesetzt.
- Die Anzahl der Bytes [1...n], die ein gültiges Multibyte-Zeichen vervollständigen.
- (size_t)-2, wenn die nächsten n Bytes Teil eines möglicherweise gültigen Multibyte-Zeichens sind, das auch nach der Untersuchung aller n Bytes noch unvollständig ist.
- (size_t)-1, wenn ein Kodierungsfehler auftritt. Der Wert von errno ist EILSEQ; der Konvertierungsstatus ist undefiniert.
[edit] Beispiel
Führen Sie diesen Code aus
#include <locale.h> #include <stdio.h> #include <string.h> #include <wchar.h> int main(void) { // allow mbrlen() to work with UTF-8 multibyte encoding setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = "水"; size_t sz = strlen(str); mbstate_t mb; memset(&mb, 0, sizeof mb); int len1 = mbrlen(str, 1, &mb); if (len1 == -2) printf("The first 1 byte of %s is an incomplete multibyte char" " (mbrlen returns -2)\n", str); int len2 = mbrlen(str + 1, sz - 1, &mb); printf("The remaining %zu bytes of %s hold %d bytes of the multibyte" " character\n", sz - 1, str, len2); printf("Attempting to call mbrlen() in the middle of %s while in initial" " shift state returns %zd\n", str, mbrlen(str + 1, sz - 1, &mb)); }
Ausgabe
The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2) The remaining 2 bytes of 水 hold 2 bytes of the multibyte character Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.29.6.3.1 The mbrlen function (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.29.6.3.1 The mbrlen function (p: TBD)
- C11-Standard (ISO/IEC 9899:2011)
- 7.29.6.3.1 The mbrlen function (p: 442)
- C99-Standard (ISO/IEC 9899:1999)
- 7.24.6.3.1 The mbrlen function (p: 388)
[edit] 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 mbrlen
| |