Exportar (0) Imprimir
Expandir todo
div
eof
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

wcsrtombs_s

Convierte una cadena de caracteres anchos en su representación de cadena de caracteres multibyte. Una versión de wcsrtombs con mejoras de seguridad como se describe en Características de seguridad de CRT.

errno_t wcsrtombs_s(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
errno_t wcsrtombs_s(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only
[out] pReturnValue

el número de caracteres convertido.

[out] mbstr

La dirección de un búfer para producir convirtió la cadena de caracteres multibyte.

[out] sizeInBytes

Tamaño en bytes del búfer de mbstr .

[in] wcstr

Apunta a la cadena de caracteres anchos que se va a convertir.

[in] count

El número de bytes máximo que se almacenan en el búfer de mbstr , o _TRUNCATE.

[in] mbstate

Un puntero a un objeto de estado de la conversión de mbstate_t .

Cero si es correcto, un código de error del error.

condición de error

valor devuelto y errno

mbstr es NULL y sizeInBytes > 0

EINVAL

El valor de wcstr es NULL.

EINVAL

El búfer de destino es demasiado pequeño para contener la cadena convertida (a menos que count es _TRUNCATE; vea las notas siguiente)

ERANGE

Si cualquiera de estas condiciones aparecen, la excepción no válida de parámetros se invoca como se describe en Validación de parámetros . Si la ejecución puede continuar, la función devuelve un código de error y establece errno como se indica en la tabla.

La función de wcsrtombs_s convierte una cadena de caracteres anchos indicada por wcstr en caracteres multibyte almacenados en el búfer indicada por mbstr, utilizando el estado de conversión contenida en mbstate. La conversión continuará por cada carácter hasta que una de estas condiciones se cumple:

  • Se encuentra un carácter ancho null

  • Se encuentra un carácter ancho que no puede convertirse

  • El número de bytes almacenados en el búfer de mbstr es igual a count.

La cadena de destino siempre es terminada en null (incluso en el caso de un error).

Si count es el valor especial _TRUNCATE, después wcsrtombs_s convierte tanto de la cadena que caben en el búfer de destino, mientras todavía deja el sitio para un carácter null final.

Si wcsrtombs_s convierte correctamente la cadena de origen, coloca el tamaño en bytes de la cadena convertida, incluido el terminador nulo, en *pReturnValue ( pReturnValue proporcionado no es NULL). Esto hace que incluso si el argumento de mbstr es NULL y proporciona una manera de determinar el tamaño de búfer requerido. Tenga en cuenta que si mbstr es NULL, count se omite.

Si wcsrtombs_s encuentra un carácter ancho que no puede convertir un carácter multibyte, coloca -1 en *pReturnValue, establece el búfer de destino en una cadena vacía, establece errno a EILSEQ, y devuelve EILSEQ.

Si las secuencias designadas por a wcstr y la superposición de mbstr , el comportamiento de wcsrtombs_s no están definidas. wcsrtombs_s afecta a la categoría de LC_TYPE de la configuración regional actual.

Nota de seguridad Nota sobre la seguridad

Asegúrese de que wcstr y mbstr no se superpongan, y que count correctamente refleja el número de caracteres anchos convertir.

la función de wcsrtombs_s diferencia de wcstombs_s, _wcstombs_s_l por su restartability. Almacena el estado de la conversión en mbstate para las llamadas subsiguientes igual o a otras funciones reiniciables. Los resultados son indefinidos al mezclar el uso de funciones reiniciables y nonrestartable. Por ejemplo, una aplicación utilizaría wcsrlen en lugar de wcslen, si una llamada subsiguiente a wcsrtombs_s se utilizó en lugar de wcstombs_s.

En C++, mediante estas funciones es simplificado con sobrecargas de plantilla; las sobrecargas pueden deducir la longitud de búfer automáticamente (que elimina la necesidad de especificar un argumento de tamaño) y automáticamente pueden reemplazar anterior, funciones de no con sus más recientes, seguros homólogos. Para obtener más información, vea Sobrecargas de plantilla seguras.

La función de wcsrtombs_s es seguro multiproceso a ninguna función en el subproceso actual llame a setlocale mientras esta función se ejecuta y mbstate es null.

// crt_wcsrtombs_s.cpp
// 
// This code example converts a wide
// character string into a multibyte
// character string.
//

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

void main()
{
    const wchar_t   wcString[] = 
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    errno_t         err;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    err = wcsrtombs_s(&countConverted, mbString, MB_BUFFER_SIZE,
                      &wcsIndirectString, MB_BUFFER_SIZE, &mbstate);
    if (err == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfully converted.\n" );
    }
}
La cadena se convierte correctamente.

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

rutina

Encabezado necesario

wcsrtombs_s

<wchar.h>

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.