std:: mbsrtowcs
|
Definiert im Header
<cwchar>
|
||
|
std::
size_t
mbsrtowcs
(
wchar_t
*
dst,
const
char
**
src,
|
||
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
*psreprä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
|
|