Namensräume
Varianten
Aktionen

std::mbstowcs

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

Konvertiert eine Multibyte-Zeichenkette aus dem Array, dessen erstes Element von src gezeigt wird, in ihre Wide-Character-Darstellung. Konvertierte Zeichen werden in den aufeinanderfolgenden Elementen des Arrays gespeichert, auf das dst zeigt. Es werden nicht mehr als len Wide-Characters in das Zielarray geschrieben.

Jedes Zeichen wird konvertiert, als ob es durch einen Aufruf von std::mbtowc erfolgen würde, mit der Ausnahme, dass der mbtowc-Konvertierungsstatus nicht beeinflusst wird. Die Konvertierung stoppt, wenn

  • Das Multibyte-Nullzeichen konvertiert und gespeichert wurde.
  • Ein ungültiges (in der aktuellen C-Locale) Multibyte-Zeichen angetroffen wurde.
  • Das nächste zu speichernde Wide-Character len überschreiten würde.

Inhalt

[bearbeiten] Hinweise

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

POSIX spezifiziert eine übliche Erweiterung: Wenn dst ein Nullzeiger ist, gibt diese Funktion die Anzahl der Wide-Characters zurück, die in dst konvertiert würden. Ein ähnliches Verhalten ist Standard für std::mbsrtowcs.

[bearbeiten] Parameter

dst - Zeiger auf das Wide-Character-Array, in dem der Wide-String gespeichert wird
src - Zeiger auf das erste Element einer nullterminierten Multibyte-Zeichenkette zur Konvertierung
len - Anzahl der Wide-Characters, die im von dst gezeigten Array verfügbar sind

[bearbeiten] Rückgabewert

Bei Erfolg wird die Anzahl der Wide-Characters zurückgegeben, die in das Zielarray geschrieben wurden, exklusive des abschließenden L'\0'.

Bei einem Konvertierungsfehler (wenn ein ungültiges Multibyte-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");
    std::wcout.imbue(std::locale("en_US.utf8"));
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << "wide string: " << wstr << '\n';
}

Ausgabe

wide string: zß水🍌

[bearbeiten] Siehe auch

konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring
(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 mbstowcs