Namespaces
Variants

std:: wcsrtombs

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

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

std:: mbstate_t * ps ) ;

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

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

  • Le caractère nul a été converti et stocké. src est défini comme un pointeur nul et * ps représente l'état de décalage initial.
  • Un wchar_t a été trouvé qui ne correspond pas à un caractère valide dans la locale C actuelle. src est défini pour pointer vers le premier caractère large non converti.
  • Le prochain caractère multi-octets à stocker dépasserait len . src est défini pour pointer vers le premier caractère large 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 étroits où les caractères multi-octets seront stockés
src - pointeur vers le pointeur du premier élément d'une chaîne large terminée par un caractère nul
len - nombre d'octets 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 d'octets (y compris les séquences de décalage, mais à l'exclusion du caractère nul de fin ' \0 ' ) écrits dans le tableau de caractères dont le premier élément est pointé par dst . Si dst est un pointeur nul, retourne le nombre d'octets qui auraient été écrits (à nouveau, à l'exclusion du caractère nul de fin ' \0 ' ).

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

Exemple

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
#include <vector>
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    print_wide(wstr);
}

Sortie :

multibyte string: zß水𝄋
Length, including '\0': 11

Voir aussi

convertit un caractère large en sa représentation multioctet, avec état donné
(fonction)
convertit une chaîne de caractères multioctets étroite en chaîne large, avec état donné
(fonction)
[virtual]
convertit une chaîne de InternT vers ExternT , comme lors de l'écriture dans un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
Documentation C pour wcsrtombs