mblen
|
Definiert in Header
<stdlib.h>
|
||
|
int
mblen
(
const
char
*
s,
size_t
n
)
;
|
||
Bestimmt die Größe in Bytes des Multibyte-Zeichens, dessen erstes Byte auf
s
zeigt.
Wenn
s
ein Nullzeiger ist,
setzt es den globalen Konvertierungszustand zurück und
(bis C23)
bestimmt, ob Schiebesequenzen verwendet werden.
Diese Funktion entspricht dem Aufruf mbtowc ( ( wchar_t * ) 0 , s, n ) , mit der Ausnahme, dass der Konvertierungszustand von mbtowc unverändert bleibt.
Inhaltsverzeichnis |
Parameter
| 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 Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder
-
1
wenn die ersten von
s
gezeigten Bytes kein gültiges Multibyte-Zeichen bilden, oder
0
wenn
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
(bis C23)
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).
Hinweise
|
Jeder Aufruf von
|
(bis C23) |
|
|
(seit C23) |
Beispiel
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // die Anzahl der Zeichen in einem Multibyte-String ist die Summe von mblen() // Hinweis: der einfachere Ansatz ist mbstowcs(NULL, str, sz) size_t strlen_mb(const char* ptr) { size_t result = 0; const char* end = ptr + strlen(ptr); mblen(NULL, 0); // den Konvertierungsstatus zurücksetzen while(ptr < end) { int next = mblen(ptr, end - ptr); if (next == -1) { perror("strlen_mb"); break; } ptr += next; ++result; } return result; } void dump_bytes(const char* str) { for (const char* end = str + strlen(str); str != end; ++str) printf("%02X ", (unsigned char)str[0]); printf("\n"); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); const char* str = "z\u00df\u6c34\U0001f34c"; printf("The string \"%s\" consists of %zu characters, but %zu bytes: ", str, strlen_mb(str), strlen(str)); dump_bytes(str); }
Mögliche Ausgabe:
The string "zß水🍌" consists of 4 characters, but 10 bytes: 7A C3 9F E6 B0 B4 F0 9F 8D 8C
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.22.7.1 Die mblen-Funktion (S. 260)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.22.7.1 Die mblen-Funktion (S: 357)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.20.7.1 Die mblen-Funktion (S. 321)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.10.7.1 Die mblen-Funktion
Siehe auch
|
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um
(Funktion) |
|
|
(C95)
|
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen unter Berücksichtigung des Zustands zurück
(Funktion) |
|
C++-Dokumentation
für
mblen
|
|