Namespaces
Variants

std:: mbsrtowcs

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

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

std:: mbstate_t * ps ) ;

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

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

  • El carácter nulo multibyte fue convertido y almacenado. src se establece como un puntero nulo y *ps representa el estado de desplazamiento inicial.
  • Se encontró un carácter multibyte inválido (de acuerdo con la configuración regional actual de C). src se establece para apuntar al inicio del primer carácter multibyte no convertido.
  • El siguiente carácter wide a almacenar excedería len . src se establece para apuntar al inicio del primer carácter multibyte no convertido. Esta condición no se verifica si dst es un puntero nulo.

Contenidos

Parámetros

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

Valor de retorno

En caso de éxito, retorna el número de caracteres anchos, excluyendo el L ' \0 ' final, escritos en el arreglo de caracteres. Si dst es un puntero nulo, retorna el número de caracteres anchos que se habrían escrito dada una longitud ilimitada.

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

Notas

Esta función mueve el puntero src al final de la cadena multibyte convertida. Esto no ocurre si dst es un puntero nulo.

Ejemplo

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

Salida:

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

Véase también

convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función)
convierte una cadena ancha a cadena de caracteres multibyte estrecha, dado el estado
(función)
[virtual]
convierte una cadena de ExternT a InternT , como cuando se lee desde archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
Documentación de C para mbsrtowcs