Namensräume
Varianten
Aktionen

std::mbsrtowcs

Von cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
Definiert in 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 von *src gezeigt wird, in seine Breitzeichenrepräsentation. Wenn dst nicht null ist, werden die konvertierten Zeichen in den aufeinanderfolgenden Elementen des Breitzeichenarrays gespeichert, auf das dst zeigt. Es werden nicht mehr als len Breitzeichen in das Zielarray geschrieben.

Jedes Multibyte-Zeichen wird so konvertiert, als ob ein Aufruf von std::mbrtowc erfolgt wäre. Die Konvertierung stoppt, wenn

  • Das Multibyte-Nullzeichen konvertiert und gespeichert wurde. src wird auf einen Nullzeiger gesetzt und *ps repräsentiert den initialen Verschiebungszustand.
  • Ein ungültiges Multibyte-Zeichen (gemäß der aktuellen C-Locale) angetroffen wurde. src wird so gesetzt, dass es auf den Anfang des ersten nicht konvertierten Multibyte-Zeichens zeigt.
  • Das nächste zu speichernde Breitzeichen len überschreiten würde. src wird so gesetzt, dass es auf den Anfang des ersten nicht konvertierten Multibyte-Zeichens zeigt. Diese Bedingung wird nicht geprüft, wenn dst ein Nullzeiger ist.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

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

Bei einem Konvertierungsfehler (wenn ein ungültiges Multibyte-Zeichen angetroffen wurde) wird static_cast<std::size_t>(-1) zurückgegeben, EILSEQ wird in errno gespeichert und *ps verbleibt in einem undefinierten Zustand.

[bearbeiten] Hinweise

Diese Funktion verschiebt den Zeiger src zum Ende des konvertierten Multibyte-Strings. Dies geschieht nicht, wenn dst ein Nullzeiger ist.

[bearbeiten] 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

[bearbeiten] Siehe auch

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