Namespaces
Variants

std:: wcsrtombs

From cppreference.net
Definiert im Header <cwchar>
std:: size_t wcsrtombs ( char * dst,

const wchar_t ** src,
std:: size_t len,

std:: mbstate_t * ps ) ;

Konvertiert eine Sequenz von Breitzeichen aus dem Array, dessen erstes Element durch * src gezeigt wird, in ihre schmale Multibyte-Darstellung, die im durch * ps beschriebenen Konvertierungszustand beginnt. Falls dst nicht null ist, werden konvertierte Zeichen in den aufeinanderfolgenden Elementen des char-Arrays gespeichert, auf das durch dst gezeigt wird. Es werden nicht mehr als len Bytes in das Zielarray geschrieben.

Jedes Zeichen wird konvertiert, als ob durch einen Aufruf von std::wcrtomb . Die Konvertierung wird beendet, wenn:

  • Das Nullzeichen wurde konvertiert und gespeichert. src wird auf einen Nullzeiger gesetzt und * ps repräsentiert den initialen Shift-Zustand.
  • Es wurde ein wchar_t gefunden, der keinem gültigen Zeichen im aktuellen C-Locale entspricht. src wird so gesetzt, dass es auf das erste nicht konvertierte Breitzeichen zeigt.
  • Das nächste zu speichernde Multibyte-Zeichen würde len überschreiten. src wird so gesetzt, dass es auf das erste nicht konvertierte Breitzeichen zeigt. Dieser Zustand wird nicht überprüft, wenn dst ein Nullzeiger ist.

Inhaltsverzeichnis

Parameter

dst - Zeiger auf das schmale Zeichenarray, in dem die Multibyte-Zeichen gespeichert werden
src - Zeiger auf den Zeiger zum ersten Element eines nullterminierten Breitzeichen-Strings
len - Anzahl der im Array verfügbaren Bytes, auf das dst zeigt
ps - Zeiger auf das Konvertierungszustandsobjekt

Rückgabewert

Bei Erfolg gibt die Anzahl der Bytes (einschließlich aller Shift-Sequenzen, jedoch ausschließlich des abschließenden ' \0 ' ) zurück, die in das Zeichenarray geschrieben wurden, dessen erstes Element durch dst gezeigt wird. Wenn dst ein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die geschrieben worden wären (wiederum ohne den abschließenden Nullterminator ' \0 ' ).

Bei Konvertierungsfehler (falls ein ungültiges Breitzeichen angetroffen wurde), gibt static_cast < std:: size_t > ( - 1 ) zurück, speichert EILSEQ in errno und belässt * ps in einem nicht spezifizierten Zustand.

Beispiel

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
#include <vector>
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
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ß水𝄋"
    print_wide(wstr);
}

Ausgabe:

multibyte string: zß水𝄋
Length, including '\0': 11

Siehe auch

wandelt ein Breitzeichen in seine Multibyte-Darstellung um, unter Berücksichtigung des Zustands
(Funktion)
wandelt eine schmale Multibyte-Zeichenkette in eine Breitzeichenkette um, unter Berücksichtigung des Zustands
(Funktion)
[virtual]
wandelt eine Zeichenkette von InternT zu ExternT um, beispielsweise beim Schreiben in eine Datei
(virtuelle geschützte Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
C-Dokumentation für wcsrtombs