Compartilhar via


wcstombs_s, _wcstombs_s_l

Converte uma sequência de caracteres amplos a uma sequência de correspondência de caracteres de vários bytes. Uma versão de wcstombs, _wcstombs_l com aprimoramentos de segurança conforme descrito em Recursos de segurança no CRT.

errno_t wcstombs_s(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count 
);
errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
errno_t wcstombs_s(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count 
); // C++ only
template <size_t size>
errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
); // C++ only

Parâmetros

  • [saída] pReturnValue
    O número de caracteres convertidos.

  • [saída] mbstr
    O endereço de um buffer resultante para converter a cadeia de caracteres de vários bytes.

  • [in]sizeInBytes
    O tamanho em bytes do buffer de mbstr .

  • [entrada] wcstr
    Aponta para a cadeia de caracteres amplas a ser convertida.

  • [entrada] count
    O número máximo de caracteres amplos sejam armazenados em buffer de mbstr , não incluindo o caractere terminador nulo, ou _TRUNCATE.

  • [entrada] locale
    A localidade a ser usada.

Valor de retorno

Zero se tiver êxito, um código de erro ou falha.

Condição de erro

Valor de retorno e errno

mbstr é NULL e sizeInBytes > 0

EINVAL

wcstr é NULL

EINVAL

O buffer de destino for muito pequeno conter a cadeia de caracteres convertida (a menos que count é _TRUNCATE; consulte os comentários abaixo)

ERANGE

Se alguma dessas condições ocorrer, a exceção inválido do parâmetro é chamada conforme descrito em Validação do parâmetro . Se a execução for permitida continuar, a função retornará um código de erro e define errno conforme indicado na tabela.

Comentários

A função de wcstombs_s converte uma cadeia de caracteres de caracteres amplos apontados por wcstr em caracteres multibyte armazenados em buffer apontado por mbstr. A conversão para cada caractere continuará até que uma destas condições seja atender:

  • Um caractere largo nulo é encontrado

  • Um caractere largo que não pode ser convertido for encontrado

  • O número de bytes armazenados em buffer de mbstr igual count.

A cadeia de caracteres de destino tiver terminação sempre (até mesmo no caso de um erro).

Se count é o valor especial _TRUNCATE, então wcstombs_s converte o máximo possível da cadeia de caracteres como caiba no buffer de destino, enquanto ainda deixar de espaço para um terminador nulo.

Se wcstombs_s converte a cadeia de caracteres de origem, coloca o tamanho em bytes da cadeia de caracteres convertida, incluindo o terminador nulo, em *pReturnValue ( pReturnValue fornecido não for NULL). Isso ocorre mesmo se o argumento de mbstr é NULL e fornece uma maneira de determinar o tamanho de buffer necessário. Observe que se mbstr é NULL, count será ignorado.

Se wcstombs_s encontrar um caractere largo que não pode converter em um caracteres multibyte, o coloca 0 em *pReturnValue, define o buffer de destino em uma cadeia de caracteres vazia, define errno a EILSEQ, e retorna EILSEQ.

Se as sequências apontadas por wcstr e a sobreposição de mbstr , o comportamento de wcstombs_s são indefinidas.

Observação de segurançaObservação de segurança

Certifique-se de que wcstr e mbstr não se sobrepõem, e que count reflete corretamente o número de caracteres amplos para converter.

wcstombs_s usa a localidade atual para qualquer comportamento dependente de localidade; _wcstombs_s_l é idêntico a wcstombs exceto que usa a localidade passada por vez. Para obter mais informações, consulte Localidade.

No C++, o uso dessas funções é simplificado por sobrecargas de modelo; as sobrecargas podem interpretar o tamanho do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e podem substituir automaticamente as funções menos seguras mais antigas por correspondentes mais seguras e mais recentes. Para obter mais informações, consulte Sobrecargas de modelo seguras.

Requisitos

Rotina

Cabeçalho necessário

wcstombs_s

<stdlib.h>

Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.

Exemplo

Esse programa ilustra o comportamento da função de wcstombs_s .

// crt_wcstombs_s.c
// This example converts a wide character
// string to a multibyte character string.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t   i;
    char      *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

    // Conversion
    wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE, 
               pWCBuffer, (size_t)BUFFER_SIZE );

    // Output
    printf("   Characters converted: %u\n", i);
    printf("    Multibyte character: %s\n\n",
     pMBBuffer );

    // Free multibyte character buffer
    if (pMBBuffer)
    {
    free(pMBBuffer);
    }
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.

Consulte também

Referência

Conversão de dados

Localidade

_mbclen, mblen, _mblen_l

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

wctomb_s, _wctomb_s_l

WideCharToMultiByte