Namespaces
Variants

std:: mbsrtowcs

From cppreference.net
Défini dans l'en-tête <cwchar>
std:: size_t mbsrtowcs ( wchar_t * dst,

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

std:: mbstate_t * ps ) ;

Convertit une séquence de caractères multioctets terminée par un caractère nul, qui commence dans l'état de conversion décrit par * ps , à partir du tableau dont le premier élément est pointé par * src vers sa représentation en caractères larges. Si dst n'est pas nul, les caractères convertis sont stockés dans les éléments successifs du tableau wchar_t pointé par dst . Pas plus de len caractères larges sont écrits dans le tableau de destination.

Chaque caractère multi-octet est converti comme par un appel à std::mbrtowc . La conversion s'arrête si :

  • Le caractère nul multi-octet a été converti et stocké. src est défini sur un pointeur nul et *ps représente l'état de décalage initial.
  • Un caractère multi-octet invalide (selon la locale C actuelle) a été rencontré. src est défini pour pointer au début du premier caractère multi-octet non converti.
  • Le prochain caractère large à stocker dépasserait len . src est défini pour pointer au début du premier caractère multi-octet non converti. Cette condition n'est pas vérifiée si dst est un pointeur nul.

Table des matières

Paramètres

dst - pointeur vers le tableau de caractères larges où les résultats seront stockés
src - pointeur vers le pointeur du premier élément d'une chaîne multioctet terminée par un caractère nul
len - nombre de caractères larges disponibles dans le tableau pointé par dst
ps - pointeur vers l'objet d'état de conversion

Valeur de retour

En cas de succès, retourne le nombre de caractères larges, à l'exclusion du caractère de fin L ' \0 ' , écrits dans le tableau de caractères. Si dst est un pointeur nul, retourne le nombre de caractères larges qui auraient été écrits avec une longueur illimitée.

En cas d'erreur de conversion (si un caractère multioctet invalide est rencontré), retourne static_cast < std:: size_t > ( - 1 ) , stocke EILSEQ dans errno , et laisse * ps dans un état non spécifié.

Notes

Cette fonction déplace le pointeur src vers la fin de la chaîne multioctet convertie. Cela ne se produit pas si dst est un pointeur nul.

Exemple

#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);
}

Sortie :

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

Voir aussi

convertit le prochain caractère multi-octet en caractère large, avec état donné
(fonction)
convertit une chaîne large en chaîne de caractères multi-octets étroite, avec état donné
(fonction)
[virtual]
convertit une chaîne de ExternT vers InternT , comme lors de la lecture depuis un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
Documentation C pour mbsrtowcs