Namespaces
Variants

std:: mbsrtowcs

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

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

std:: mbstate_t * ps ) ;

Konvertiert eine nullterminierte Multibyte-Zeichensequenz, die im durch * ps beschriebenen Konvertierungszustand beginnt, aus dem Array, dessen erstes Element durch * src gezeigt wird, in ihre Wide-Character-Darstellung. Falls dst nicht null ist, werden konvertierte Zeichen in den aufeinanderfolgenden Elementen des durch dst gezeigten wchar_t-Arrays gespeichert. Es werden nicht mehr als len Wide-Character in das Zielarray geschrieben.

Jedes Multibyte-Zeichen wird konvertiert, als ob durch einen Aufruf von std::mbrtowc . Die Konvertierung stoppt, wenn:

  • Das multibyte Nullzeichen wurde konvertiert und gespeichert. src wird auf einen Nullzeiger gesetzt und *ps repräsentiert den initialen Shift-Zustand.
  • Ein ungültiges Multibyte-Zeichen (gemäß der aktuellen C-Locale) wurde angetroffen. src wird auf den Anfang des ersten nicht konvertierten Multibyte-Zeichens gesetzt.
  • Das nächste zu speichernde Wide Character würde len überschreiten. src wird auf den Anfang des ersten nicht konvertierten Multibyte-Zeichens gesetzt. Dieser Zustand wird nicht überprüft, wenn dst ein Nullzeiger ist.

Inhaltsverzeichnis

Parameter

dst - Zeiger auf das Wide-Character-Array, in dem die Ergebnisse gespeichert werden
src - Zeiger auf den Zeiger zum ersten Element eines nullterminierten Multibyte-Strings
len - Anzahl der Wide Characters, die im von dst gezeigten Array verfügbar sind
ps - Zeiger auf das Konvertierungszustandsobjekt

Rückgabewert

Bei Erfolg gibt die Anzahl der Breitzeichen zurück, ausgenommen des abschließenden L ' \0 ' , die in das Zeichenarray geschrieben wurden. Wenn dst ein Nullzeiger ist, gibt die Anzahl der Breitzeichen zurück, die bei unbegrenzter Länge geschrieben worden wären.

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

Hinweise

Diese Funktion bewegt den src Zeiger zum Ende der konvertierten Multibyte-Zeichenkette. Dies geschieht nicht, wenn dst ein Nullzeiger ist.

Beispiel

#include <clocale>
#include <cwchar>
#include <iostream>
#include <vector>
void print_as_wide(const char* mbstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state);
    std::vector<wchar_t> wstr(len);
    std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state);
    std::wcout << "Wide string: " << &wstr[0] << '\n'
               << "The length, including '\\0': " << wstr.size() << '\n';
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
    print_as_wide(mbstr);
}

Ausgabe:

Wide string: zß水🍌
The length, including '\0': 5

Siehe auch

wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion)
wandelt eine Breitzeichen-Zeichenkette in eine schmale Multibyte-Zeichenkette um, unter Berücksichtigung des Zustands
(Funktion)
[virtual]
konvertiert eine Zeichenkette von ExternT zu InternT , beispielsweise beim Lesen aus einer Datei
(virtuelle geschützte Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
C-Dokumentation für mbsrtowcs