Namespaces
Variants

mbtowc

From cppreference.net
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)

Konvertiert ein Multibyte-Zeichen, dessen erstes Byte durch s gezeigt wird, in ein Wide Character, geschrieben nach * pwc falls pwc nicht null ist.

Wenn s ein Nullzeiger ist, setzt es den globalen Konvertierungszustand zurück und bestimmt, ob Schiebesequenzen verwendet werden.

Inhaltsverzeichnis

Hinweise

Jeder Aufruf von mbtowc aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ mbstate_t , der nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Schaltzustände verwendet, muss darauf geachtet werden, Backtracking oder mehrfaches Scannen zu vermeiden. In jedem Fall sollten mehrere Threads mbtowc nicht ohne Synchronisierung aufrufen: mbrtowc kann stattdessen verwendet werden.

Parameter

pwc - Zeiger auf das Breitzeichen 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

Rückgabewert

Wenn s kein Nullzeiger ist, gibt die Funktion die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder - 1 falls die ersten von s gezeigten Bytes kein gültiges Multibyte-Zeichen bilden, oder 0 falls 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 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).

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ß水🍌

Referenzen

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

Siehe auch

(C95)
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion)
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion)