Compartilhar via


wcstombs_s, _wcstombs_s_l

Converte uma sequência de caracteres largos em uma sequência de caracteres multibyte correspondente.Uma versão do wcstombs, _wcstombs_l com aprimoramentos de segurança sistema autônomo descrito em Aprimoramentos 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

  • [out] pReturnValue
    O número de caracteres convertida.

  • [out] mbstr
    O endereço de um buffer para a seqüência de caractere multibyte convertido resultante.

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

  • [in]wcstr
    Aponta para o caractere largo seqüência de caracteres a ser convertido.

  • [in]count
    O número máximo de bytes a ser armazenado na mbstr buffer, ou _TRUNCATE.

  • [in]locale
    A localidade para usar.

Valor de retorno

Zero se for bem-sucedido, um código de erro em caso de falha.

Condição de erro

valor retornado e errno

mbstr é NULL e sizeInBytes>0

EINVAL

wcstr é NULL

EINVAL

O buffer de destino é muito pequeno para conter a seqüência de caracteres convertida (a menos que count é _TRUNCATEConsulte os comentários abaixo)

ERANGE

Se qualquer uma dessas condições ocorrer, a exceção de parâmetro inválido é invocada sistema autônomo descrito em Validação de parâmetro . Se a execução for permitida para continuar, a função retorna um código de erro e define errno sistema autônomo indicado na tabela.

Comentários

The wcstombs_s função converte uma seqüência de caracteres largos apontada por wcstr em caracteres multibyte armazenados em buffer apontado por mbstr. A conversão continuará para cada caractere até que uma das seguintes condições seja atendida:

  • Encontrado um caractere de largo nulo

  • Um caractere largo não pode ser convertido é encontrado

  • O número de bytes armazenados no mbstr buffer é igual a count.

A seqüência de caracteres de destino sempre é terminada por caractere nulo (até mesmo no caso de erro).

If count é o valor especial _TRUNCATE, em seguida, wcstombs_s Converte sistema autônomo da seqüência de caracteres sistema autônomo couberem no buffer de destino, enquanto ainda deixa espaço para um terminador nulo.

If wcstombs_s com êxito converte a seqüência de caracteres de fonte, ele coloca o dimensionar em bytes da seqüência de caracteres convertida, incluindo o terminador nulo, em *pReturnValue (fornecido pReturnValue não é NULL). Isso ocorre mesmo se o mbstr o argumento é NULL e fornece uma maneira para determinar o dimensionar do buffer necessário. Observe que, se mbstr é NULL, count é ignorado.

If wcstombs_s encontrar um caractere largo não pode converter em um caractere de vários bytes, ele insere 0 na *pReturnValue, define o buffer de destino como uma seqüência de caracteres vazia, conjuntos errno para EILSEQe retorna EILSEQ.

Se as seqüências apontada por wcstr e mbstr se sobrepõem, o comportamento do wcstombs_s não está definida.

Observação de segurança:

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

wcstombs_s usa a localidade corrente para qualquer comportamento dependente de localidade; _wcstombs_s_l é idêntico ao wcstombs exceto que ele usa a localidade do passado em vez disso. For more information, see Localidade.

No C++, usando essas funções é simplificado pelo modelo sobrecargas; sobrecargas de podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de dimensionar) e eles podem substituir automaticamente funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.For more information, see Proteger overloads de modelo.

Requisitos

Rotina

Cabeçalho necessário

wcstombs_s

<stdlib.h>

Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.

Exemplo

Este programa ilustra o comportamento do wcstombs_s função.

// 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);
    }
}

Convert wide-character string:    Characters converted: 14     Multibyte character: Hello, world.

Equivalente do NET Framework

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

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