mblen()

mblen ist definiert in der 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) Multibyte-Zeichen besteht.

Signatur

#include <stdlib.h>
int mblen( char const * mbcharptr, size_t max);

mbcharptr: Zeiger auf das 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.: errno auslesen
Null-Pointer - gibt an, ob der Zeichensatz statusabhängig ist (s. Bemerkungen)

Bemerkungen

Multibyte-Unterstützung kann über 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 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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
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