Namespaces
Variants

std:: wcsrtombs

From cppreference.net
Definido en el encabezado <cwchar>
std:: size_t wcsrtombs ( char * dst,

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

std:: mbstate_t * ps ) ;

Convierte una secuencia de caracteres anchos del array cuyo primer elemento está apuntado por * src a su representación multibyte estrecha que comienza en el estado de conversión descrito por * ps . Si dst no es nulo, los caracteres convertidos se almacenan en los elementos sucesivos del array de char apuntado por dst . No se escriben más de len bytes en el array de destino.

Cada carácter se convierte como si mediante una llamada a std::wcrtomb . La conversión se detiene si:

  • El carácter nulo fue convertido y almacenado. src se establece como un puntero nulo y * ps representa el estado de desplazamiento inicial.
  • Se encontró un wchar_t que no corresponde a un carácter válido en la configuración regional C actual. src se establece para apuntar al primer carácter ancho no convertido.
  • El siguiente carácter multibyte a almacenar excedería len . src se establece para apuntar al primer carácter ancho no convertido. Esta condición no se verifica si dst es un puntero nulo.

Contenidos

Parámetros

dst - puntero al array de caracteres estrechos donde se almacenarán los caracteres multibyte
src - puntero a puntero del primer elemento de una cadena ancha terminada en nulo
len - número de bytes disponibles en el array apuntado por dst
ps - puntero al objeto de estado de conversión

Valor de retorno

En caso de éxito, retorna el número de bytes (incluyendo cualquier secuencia de desplazamiento, pero excluyendo el carácter terminador ' \0 ' ) escritos en el arreglo de caracteres cuyo primer elemento está apuntado por dst . Si dst es un puntero nulo, retorna el número de bytes que habrían sido escritos (nuevamente, excluyendo el carácter nulo terminador ' \0 ' ).

En caso de error de conversión (si se encontró un carácter ancho no válido), retorna static_cast < std:: size_t > ( - 1 ) , almacena EILSEQ en errno , y deja * ps en estado no especificado.

Ejemplo

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

Salida:

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

Véase también

convierte un carácter ancho a su representación multibyte, dado un estado
(función)
convierte una cadena de caracteres multibyte estrechos a cadena ancha, dado un estado
(función)
[virtual]
convierte una cadena de InternT a ExternT , como cuando se escribe a archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
Documentación de C para wcsrtombs