Namensräume
Varianten
Aktionen

c8rtomb

Von cppreference.com
< c‎ | string‎ | multibyte
Definiert im Header <uchar.h>
size_t c8rtomb( char* restrict s, char8_t c8, mbstate_t* restrict ps );
(seit C23)

Konvertiert einen einzelnen Code-Punkt von UTF-8 in eine schmale Multibyte-Zeichen-Darstellung.

Wenn s kein Nullzeiger ist und c8 die letzte Code-Einheit in einer gültigen UTF-8-Kodierung eines Code-Punktes ist, ermittelt die Funktion die Anzahl der Bytes, die zur Speicherung der Multibyte-Zeichen-Darstellung dieses Code-Punktes erforderlich sind (einschließlich aller Umschaltsequenzen und unter Berücksichtigung des aktuellen Konvertierungszustandes für Multibyte-Zeichen *ps), und speichert die Multibyte-Zeichen-Darstellung im Zeichen-Array, dessen erstes Element von s gezeigt wird, und aktualisiert *ps bei Bedarf. Höchstens MB_CUR_MAX Bytes können von dieser Funktion geschrieben werden.

Wenn c8 nicht die endgültige UTF-8-Code-Einheit in einer Darstellung eines Code-Punktes ist, schreibt die Funktion nicht in das von s gezeigte Array, nur *ps wird aktualisiert.

Wenn s ein Nullzeiger ist, ist der Aufruf äquivalent zu c8rtomb(buf, u8'\0', ps) für einen internen Puffer buf.

Wenn c8 das Nullzeichen u8'\0' ist, wird ein Null-Byte gespeichert, dem jede Umschaltsequenz vorausgeht, die erforderlich ist, um den ursprünglichen Umschaltzustand wiederherzustellen, und der Konvertierungszustandsparameter *ps wird aktualisiert, um den ursprünglichen Umschaltzustand darzustellen.

Die von dieser Funktion verwendete Multibyte-Kodierung wird durch die aktuell aktive C-Locale bestimmt.

Inhalt

[bearbeiten] Parameter

s - Zeiger auf das schmale Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird
c8 - die zu konvertierende UTF-8-Code-Einheit
ps - Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation des Multibyte-Strings verwendet wird

[bearbeiten] Rückgabewert

Die Anzahl der in das Array-Objekt geschriebenen Bytes (einschließlich aller Umschaltsequenzen). Diese kann Null sein, wenn c8 nicht die endgültige Code-Einheit in der UTF-8-Darstellung eines Code-Punktes ist.

Wenn c8 ungültig ist (trägt nicht zu einer Sequenz von char8_t bei, die einem gültigen Multibyte-Zeichen entspricht), wird der Wert des Makros EILSEQ in errno gespeichert, (size_t)-1 wird zurückgegeben und der Konvertierungszustand ist nicht spezifiziert.

[bearbeiten] Hinweise

Aufrufe von c8rtomb mit einem Nullzeiger-Argument für s können zu einem Datenrennen mit anderen Aufrufen von c8rtomb mit einem Nullzeiger-Argument für s führen.

[bearbeiten] Beispiel

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.30.1.2 Die Funktion c8rtomb

[bearbeiten] Siehe auch

konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung
(Funktion) [bearbeiten]
C++ Dokumentation für c8rtomb