c8rtomb
| Definiert im Header <uchar.h> |
||
| (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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.30.1.2 Die Funktion c8rtomb
[bearbeiten] Siehe auch
| (C23) |
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung (Funktion) |
| C++ Dokumentation für c8rtomb
| |