====== mblen() ====== mblen ist definiert in der ''[[start|stdlib]]'', die in C über ''stdlib.h'', bzw. in C++ über ''cstdlib'' eingebunden wird. ===== Funktion ===== mblen() liefert die Zahl der Bytes aus denen ein (einzelnes) [[theory:encoding:multibyte|Multibyte-Zeichen]] besteht. ===== Signatur ===== #include int mblen( char const * mbcharptr, size_t max); **mbcharptr**: Zeiger auf das [[theory:encoding:multibyte|Multibyte-Zeichen]] \\ **max**: Maximale Anzahl von Bytes, die geprüft werden sollen. Unabhängig der Eingabe werden nicht mehr als [[MB_CUR_MAX]] Bytes geprüft. **Return value**: ^ Eingabe: mbcharptr ^ mbchar ^ Rückgabe ^ | valider Zeiger | valides Zeichen | Die Anzahl der Bytes, die das Zeichen benötigt. | | valider Zeiger | Null-Zeichen | 0 | | valider Zeiger | invalides Zeichen | -1, ggfs.: [[c:lib:errno:errno]] auslesen | | Null-Pointer | - | gibt an, ob der Zeichensatz statusabhängig ist (s. Bemerkungen) | ===== Bemerkungen ===== Multibyte-Unterstützung kann über [[http://www.unicode.org|Unicode]] UTF-8 erfolgen. Grundsätzlich ist aber auch eine vollkommen anderen Kodierung denkbar, da der Standard die Kodierung nicht festlegt. Um die Multibyte-Unterstützung zu aktivieren ist die Verwendung von [[c:lib:locale:setocale()]] erforderlich. Multibyte-Zeichensätze können statusabhängig sein. Das bedeutet, dass ein Zeichen den Zeichensatz verändert, so dass eine Zeichennummer eine andere Bedeutung erhält. Eine Zeichennummer entspricht hier einer Taste auf der Tastatur, z.B. 'a'. Wird nun die Zeichennummer/Taste CAPS-LOCK gefunden, so wird der Status des Zeichensatzes verändert. Kommt nun die Zeichennummer/Taste 'a' erhält man das Zeichen 'A'. Zeichensätze sind in der Regel nicht statusabhängig. ===== Beispiel ===== #include #include #include #include int mbstrlen( char const * mbstring ) { char const * pos = mbstring; int length = 0; while( *pos != '\0' ) { length++; pos += mblen( pos, MB_CUR_MAX ); } return length; } int main( void ) { char const * multibytestring = "\xd0\x98 & \xd0\xaf"; // Alpha (2Bytes) - Leerzeichen - & - Leerzeichen - Omega (2Bytes) printf( "Länge des Strings in Bytes: %d\n", strlen( multibytestring ) ); setlocale(LC_CTYPE, "POSIX"); printf( "POSIX: Es wurden %d Multibytezeichen gefunden.\n", mbstrlen( multibytestring ) ); setlocale(LC_CTYPE, "de_DE"); printf( "de_DE: Es wurden %d Multibytezeichen gefunden.\n", mbstrlen( multibytestring ) ); return 0; } Ausgabe: Länge des Strings in Bytes: 7 POSIX: Es wurden 7 Multibytezeichen gefunden. de_DE: Es wurden 5 Multibytezeichen gefunden. ===== siehe auch ===== [[theory:start#Kodierung|Encoding]]: [[theory:encoding:WideChar]], [[theory:encoding:ASCII]] \\ [[c:lib:stdlib:start|stdlib]]: [[c:lib:stdlib:mbtowc()]], [[c:lib:stdlib:wctomb()]], [[c:lib:stdlib:mbstowcs()]], [[c:lib:stdlib:wcstombs()]] \\ [[c:lib:locale:start|locale]]: [[c:lib:locale:setlocale()]] \\ [[http://forum.proggen.org/viewtopic.php?f=39&t=929|Autorendiskussion]]