std:: mbsrtowcs
|
Definido en el encabezado
<cwchar>
|
||
|
std::
size_t
mbsrtowcs
(
wchar_t
*
dst,
const
char
**
src,
|
||
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
*psrepresenta 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
|
|