Namensräume
Varianten
Aktionen

mbtowc

Von cppreference.com
< c‎ | string‎ | multibyte
Definiert im Header <stdlib.h>
int mbtowc( wchar_t*          pwc, const char*          s, size_t n )
(bis C99)
int mbtowc( wchar_t* restrict pwc, const char* restrict s, size_t n )
(seit C99)

Wandelt ein Multibyte-Zeichen, dessen erster Byte auf s zeigt, in ein Wide-Zeichen um, das nach *pwc geschrieben wird, falls pwc nicht null ist.

Wenn s ein Null-Zeiger ist, wird der globale Konvertierungszustand zurückgesetzt und ermittelt, ob Shift-Sequenzen verwendet werden.

Inhalt

[bearbeiten] Hinweise

Jeder Aufruf von mbtowc aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ mbstate_t, das nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Zustandswechsel verwendet, muss darauf geachtet werden, Rückschritte oder Mehrfachscans zu vermeiden. In jedem Fall sollten mehrere Threads mbtowc nicht ohne Synchronisation aufrufen: mbrtowc kann stattdessen verwendet werden.

[bearbeiten] Parameter

pwc - Zeiger auf das Wide-Zeichen für die Ausgabe
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 Null-Zeiger ist, gibt die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder -1, wenn die ersten Bytes, auf die s zeigt, kein gültiges Multibyte-Zeichen bilden, oder 0, wenn s auf das Null-Zeichen '\0' zeigt.

Wenn s ein Null-Zeiger ist, wird sein interner Konvertierungszustand zurückgesetzt, um den anfänglichen Zustandswechsel darzustellen, und es wird 0 zurückgegeben, wenn die aktuelle Multibyte-Kodierung nicht zustandsabhängig ist (keine Shift-Sequenzen verwendet) oder ein Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).

[bearbeiten] Beispiel

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
 
// print multibyte string to wide-oriented stdout
// equivalent to wprintf(L"%s\n", ptr);
void print_mb(const char* ptr)
{
    mbtowc(NULL, NULL, 0); // reset the conversion state
    const char* end = ptr + strlen(ptr);
    int ret = 0;
    for (wchar_t wc; (ret = mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret)
        wprintf(L"%lc", wc);
    wprintf(L"\n");
}
 
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    print_mb("z\u00df\u6c34\U0001F34C"); // or "zß水🍌"
}

Ausgabe

zß水🍌

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.24.7.2 Die Funktion mbtowc (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.22.7.2 Die Funktion mbtowc (p: 260)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.22.7.2 Die Funktion mbtowc (p: 358)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.20.7.2 Die Funktion mbtowc (p: 322)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.10.7.2 Die Funktion mbtowc

[bearbeiten] Siehe auch

konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand
(Funktion) [bearbeiten]
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion) [bearbeiten]
C++ Dokumentation für mbtowc