mblen
| Definiert im Header <stdlib.h> |
||
| int mblen( const char* s, size_t n ); |
||
Bestimmt die Größe des Multibyte-Zeichens in Bytes, auf das der erste Byte von s zeigt.
Wenn s ein Nullzeiger ist, setzt den globalen Konvertierungszustand zurück und(bis C23) bestimmt, ob Shift-Sequenzen verwendet werden.
Diese Funktion ist äquivalent zum Aufruf mbtowc((wchar_t*)0, s, n), mit der Ausnahme, dass der Konvertierungszustand von mbtowc unbeeinflusst bleibt.
Inhalt |
[bearbeiten] Parameter
| 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 Nullzeiger ist, gibt die Anzahl der Bytes zurück, die das Multibyte-Zeichen enthält, 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 seinen internen Konvertierungszustand zurück, um den anfänglichen Shift-Zustand darzustellen, und(bis C23) gibt 0 zurück, wenn die aktuelle Multibyte-Kodierung nicht zustandsabhängig ist (keine Shift-Sequenzen verwendet) oder einen Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).
[bearbeiten] Anmerkungen
|
Jeder Aufruf von |
(bis C23) |
|
|
(seit C23) |
[bearbeiten] Beispiel
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // the number of characters in a multibyte string is the sum of mblen()'s // note: the simpler approach is mbstowcs(NULL, str, sz) size_t strlen_mb(const char* ptr) { size_t result = 0; const char* end = ptr + strlen(ptr); mblen(NULL, 0); // reset the conversion state 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
[bearbeiten] Referenzen
- C17-Standard (ISO/IEC 9899:2018)
- 7.22.7.1 The mblen function (p: 260)
- C11-Standard (ISO/IEC 9899:2011)
- 7.22.7.1 The mblen function (p: 357)
- C99-Standard (ISO/IEC 9899:1999)
- 7.20.7.1 The mblen function (p: 321)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.10.7.1 The mblen function
[bearbeiten] Siehe auch
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen (Funktion) | |
| (C95) |
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück, gegeben den Zustand (Funktion) |
| C++ Dokumentation für mblen
| |