std:: wcsrtombs
|
Défini dans l'en-tête
<cwchar>
|
||
|
std::
size_t
wcsrtombs
(
char
*
dst,
const
wchar_t
**
src,
|
||
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
|
|