Namensräume
Varianten
Aktionen

std::wcstombs

Von cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
Definiert in Header <cstdlib>
std::size_t wcstombs( char* dst, const wchar_t* src, std::size_t len );

Konvertiert eine Sequenz von Wide-Zeichen aus dem Array, auf dessen erstes Element src zeigt, in seine schmale Multibyte-Darstellung, die im Anfangs-Shift-Zustand beginnt. Konvertierte Zeichen werden in den aufeinanderfolgenden Elementen des Char-Arrays gespeichert, auf dessen erstes Element dst zeigt. Nicht mehr als len Bytes werden in das Ziel-Array geschrieben.

Jedes Zeichen wird konvertiert, als ob es durch einen Aufruf von std::wctomb erfolgt wäre, mit der Ausnahme, dass der Konvertierungszustand von wctomb unberührt bleibt. Die Konvertierung stoppt, wenn

  • Das Nullzeichen konvertiert und gespeichert wurde.
  • Ein wchar_t gefunden wurde, das keinem gültigen Zeichen in der aktuellen C-Locale entspricht.
  • Das nächste zu speichernde Multibyte-Zeichen len überschreiten würde.

Inhalt

[bearbeiten] Anmerkungen

In den meisten Implementierungen aktualisiert diese Funktion ein globales statisches Objekt vom Typ std::mbstate_t, während sie die Zeichenkette verarbeitet, und kann nicht gleichzeitig von zwei Threads aufgerufen werden. std::wcsrtombs sollte in solchen Fällen verwendet werden.

POSIX spezifiziert eine häufige Erweiterung: Wenn dst ein Nullzeiger ist, gibt diese Funktion die Anzahl der Bytes zurück, die in dst geschrieben würden, wenn sie konvertiert werden. Ein ähnliches Verhalten ist Standard für std::wcsrtombs.

[bearbeiten] Parameter

dst - Zeiger auf das schmale Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird
src - Zeiger auf das erste Element einer nullterminierten Wide-Zeichenkette, die konvertiert werden soll
len - Anzahl der Bytes, die im von dst gezeigten Array verfügbar sind

[bearbeiten] Rückgabewert

Bei Erfolg wird die Anzahl der Bytes zurückgegeben (einschließlich aller Shift-Sequenzen, aber ausschließlich des terminierenden '\0'), die in das Zeichenarray geschrieben wurden, auf dessen erstes Element dst zeigt.

Bei einem Konvertierungsfehler (wenn ein ungültiges Wide-Zeichen angetroffen wurde) wird static_cast<std::size_t>(-1) zurückgegeben.

[bearbeiten] Beispiel

#include <clocale>
#include <cstdlib>
#include <iostream>
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "multibyte string: " << mbstr << '\n';
}

Ausgabe

multibyte string: zß水𝄋

[bearbeiten] Siehe auch

konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String
(Funktion) [bearbeiten]
[virtuell]
konvertiert eine Zeichenkette von InternT nach ExternT, z. B. beim Schreiben in eine Datei
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
C-Dokumentation für wcstombs