wcstombs
, _wcstombs_l
Convierte una secuencia de caracteres anchos en una secuencia correspondiente de caracteres multibyte. Hay disponibles versiones más seguras de estas funciones; consulte wcstombs_s
, _wcstombs_s_l
.
Sintaxis
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
size_t _wcstombs_l(
char *mbstr,
const wchar_t *wcstr,
size_t count,
_locale_t locale
);
template <size_t size>
size_t wcstombs(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count
); // C++ only
template <size_t size>
size_t _wcstombs_l(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count,
_locale_t locale
); // C++ only
Parámetros
mbstr
Dirección de una secuencia de caracteres multibyte.
wcstr
Dirección de una secuencia de caracteres anchos.
count
Número máximo de bytes que se pueden almacenar en la cadena de salida multibyte.
locale
Configuración regional que se va a usar.
Valor devuelto
Si wcstombs
convierte correctamente la cadena multibyte, devuelve el número de bytes escritos en la cadena de salida multibyte, sin incluir el carácter final NULL
(si lo hubiera). Si el argumento mbstr
es NULL
, wcstombs
devuelve el tamaño necesario en bytes de la cadena de destino. Si wcstombs
encuentra un carácter ancho que no puede convertir en un carácter multibyte, devuelve -1 conversión al tipo size_t
y establece en errno
EILSEQ
.
Comentarios
La función wcstombs
convierte la cadena de caracteres anchos a la que apunta wcstr
en los caracteres multibyte correspondientes y almacena los resultados en la matriz mbstr
. El parámetro count
indica el número máximo de bytes que se pueden almacenar en la cadena de salida multibyte (es decir, el tamaño de mbstr
). En general, no se conoce el número de bytes que se necesitarán al convertir una cadena de caracteres anchos. Algunos caracteres anchos solo requerirán un solo byte en la cadena de salida; otros requieren 2 bytes. Si hay 2 bytes en la cadena de salida multibyte para cada carácter ancho de la cadena de entrada (incluido el carácter NULL
ancho), se garantiza que el resultado se ajuste.
A partir de Windows 10 versión 1803 (10.0.17134.0), el tiempo de ejecución de C universal admite el uso de páginas con codificación UTF-8. Use wcstombs(NULL, wcstr, 0)
para obtener el tamaño correcto que necesitará para la conversión, ya que suponiendo que necesitará dos bytes para cada carácter ancho puede no ser suficiente. Para obtener más información sobre la compatibilidad con UTF-8, consulte Compatibilidad con UTF-8.
Si wcstombs
encuentra el carácter NULL
de caracteres anchos (L'\0') mientras se produce count
o antes, lo convierte en un 0 de 8 bits y se detiene. Por tanto, la cadena de caracteres multibyte en mbstr
se terminal en NULL solo si wcstombs
encuentra un carácter NULL
de caracteres anchos durante la conversión. Si las secuencias señaladas por wcstr
y mbstr
se superponen, el comportamiento de wcstombs
no está definido.
Si el argumento mbstr
es NULL
, wcstombs
devuelve el tamaño necesario en bytes de la cadena de destino.
wcstombs
valida sus parámetros. Si wcstr
es , o si count
es NULL
mayor que INT_MAX
, esta función invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, la función establece errno
en EINVAL
y devuelve -1.
wcstombs
usa la configuración regional actual para cualquier comportamiento dependiente de la configuración regional; _wcstombs_l
es igual, salvo que en su lugar usa la configuración regional pasada. Para obtener más información, vea Locale.
En C++, estas funciones tienen sobrecargas de plantilla que invocan los homólogos seguros más recientes de estas funciones. Para obtener más información, consulte Sobrecargas de plantilla seguras.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario |
---|---|
wcstombs |
<stdlib.h> |
_wcstombs_l |
<stdlib.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
Este programa muestra el comportamiento de la función wcstombs
.
// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of
// multibyte characters.
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc( BUFFER_SIZE );
wchar_t *pWCBuffer = L"Hello, world.";
printf("Convert wide-character string:\n" );
count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s instead
printf(" Characters converted: %u\n",
count );
printf(" Multibyte character: %s\n\n",
pMBBuffer );
free(pMBBuffer);
}
Convert wide-character string:
Characters converted: 13
Multibyte character: Hello, world.
Consulte también
Conversión de datos
Configuración regional
_mbclen
, , mblen
, _mblen_l
mbstowcs
, _mbstowcs_l
mbtowc
, _mbtowc_l
wctomb
, _wctomb_l
WideCharToMultiByte