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