Namespaces
Variants

std:: mbstowcs

From cppreference.net
Definido en el encabezado <cstdlib>
std:: size_t mbstowcs ( wchar_t * dst, const char * src, std:: size_t len ) ;

Convierte una cadena de caracteres multibyte del array cuyo primer elemento está apuntado por src a su representación de caracteres anchos. Los caracteres convertidos se almacenan en los elementos sucesivos del array apuntado por dst . No se escriben más de len caracteres anchos en el array de destino.

Cada carácter se convierte como si mediante una llamada a std::mbtowc , excepto que el estado de conversión de mbtowc no se ve afectado. La conversión se detiene si:

  • El carácter nulo multibyte fue convertido y almacenado.
  • Se encontró un carácter multibyte inválido (en la configuración regional C actual).
  • El siguiente carácter ancho a almacenar excedería len .

Contenidos

Notas

En la mayoría de las implementaciones, esta función actualiza un objeto estático global de tipo std::mbstate_t mientras procesa la cadena, y no puede ser llamada simultáneamente por dos hilos, std::mbsrtowcs debería ser utilizada en tales casos.

POSIX especifica una extensión común: si dst es un puntero nulo, esta función retorna el número de caracteres anchos que serían escritos en dst , si se convirtiera. Un comportamiento similar es estándar para std::mbsrtowcs .

Parámetros

dst - puntero al arreglo de caracteres anchos donde se almacenará la cadena ancha
src - puntero al primer elemento de una cadena multibyte terminada en nulo a convertir
len - número de caracteres anchos disponibles en el arreglo apuntado por dst

Valor de retorno

En caso de éxito, retorna el número de caracteres anchos, excluyendo el L ' \0 ' final, escritos en el array de destino.

En caso de error de conversión (si se encuentra un carácter multibyte no válido), retorna static_cast < std:: size_t > ( - 1 ) .

Ejemplo

#include <clocale>
#include <cstdlib>
#include <iostream>
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << "wide string: " << wstr << '\n';
}

Salida:

wide string: zß水🍌

Véase también

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