Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Converte uma sequência de caracteres largos numa sequência correspondente de caracteres de vários bytes. Uma versão de wcstombs, _wcstombs_l com melhorias de segurança descritas em Funcionalidades de Segurança no CRT.
Sintaxe
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
pReturnValue
O tamanho em bytes da cadeia convertida, incluindo o terminador nulo.
mbstr
O endereço de um buffer para a cadeia de caracteres multibyte convertida resultante.
sizeInBytes
O tamanho em bytes do mbstr buffer.
wcstr
Aponta para a cadeia larga de caracteres a converter.
count
O número máximo de bytes a armazenar no mbstr buffer, excluindo o carácter nulo de terminação, ou _TRUNCATE.
locale
A localidade a ser usada.
Valor de retorno
Zero se for bem-sucedido, código de erro em caso de falha.
| Condição de erro | Valor de retorno e errno |
|---|---|
mbstr é NULL e sizeInBytes> 0 |
EINVAL |
wcstr é NULL |
EINVAL |
O buffer de destino é demasiado pequeno para conter a cadeia convertida (a menos que count seja _TRUNCATE; ver Observações abaixo) |
ERANGE |
Se alguma destas condições ocorrer, a exceção de parâmetro inválida é invocada conforme descrito na validação de parâmetros. Se a execução for permitida continuar, a função devolve um código de erro e define errno conforme indicado na tabela.
Observações
A wcstombs_s função converte uma cadeia de caracteres largos apontados para por wcstr em caracteres multibyte armazenados no buffer apontado por mbstr. A conversão continuará para cada personagem até que uma destas condições seja cumprida:
Encontra-se um carácter null wide
Encontra-se um carácter amplo que não pode ser convertido
O número de bytes armazenados no
mbstrbuffer écountigual a .
A cadeia de destino é sempre terminada por null (mesmo que haja um erro).
Se count for o valor _TRUNCATEespecial , então wcstombs_s converte tanto da cadeia quanto caber no buffer de destino, deixando ainda espaço para um terminador nulo. Se a cadeia for truncada, o valor de retorno é STRUNCATE, e a conversão é considerada bem-sucedida.
Se wcstombs_s converter com sucesso a cadeia de origem, coloca o tamanho em bytes da cadeia convertida, incluindo o terminador nulo, em *pReturnValue (desde que pReturnValue não NULLseja ). O tamanho é calculado mesmo que o argumento mbstr seja NULL; fornece uma forma de determinar o tamanho do buffer necessário. Se mbstr for NULL, count é ignorado.
Se wcstombs_s encontrar um carácter amplo que não consegue converter para um carácter multibyte, coloca 0 em *ReturnValue, define o buffer de destino para uma string vazia, define errno para EILSEQ, e retorna EILSEQ.
Se as sequências apontarem para por wcstr e mbstr se sobreporem, o comportamento de wcstombs_s é indefinido.
Importante
Certifique-se disso wcstr e mbstr não se sobrepõe, e isso count reflete corretamente o número de caracteres largos a converter.
wcstombs_s usa a localização atual para qualquer comportamento dependente da localização; _wcstombs_s_l é idêntico a wcstombs exceto que usa o local passado em vez disso. Para obter mais informações, consulte Localidade.
Em C++, a utilização destas funções é simplificada por sobrecargas de templates; As sobrecargas podem inferir automaticamente o comprimento do buffer (eliminando a necessidade de especificar um argumento de tamanho) e podem substituir automaticamente funções antigas e não seguras pelas suas contrapartes mais recentes e seguras. Para obter mais informações, consulte Sobrecargas de modelo seguro.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.
Requisitos
| Rotina | Cabeçalho obrigatório | Biblioteca obrigatória |
|---|---|---|
wcstombs_s |
<stdlib.h> |
ucrt.lib (a Biblioteca Universal de Tempo de Execução em C) |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
Este programa ilustra o comportamento da 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 );
const 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 - 1); // -1 so the appended NULL doesn't fall outside the allocated buffer
// Output
printf(" Characters converted: %u\n", i);
printf(" Multibyte character: %s\n\n", pMBBuffer );
// Free multibyte character buffer
if (pMBBuffer)
{
free(pMBBuffer);
}
return 0;
}
Convert wide-character string:
Characters converted: 14
Multibyte character: Hello, world.
Consulte também
Conversão de dados
Locale
_mbclen, mblen, _mblen_l
mbstowcs, _mbstowcs_l
mbtowc, _mbtowc_l
wctomb_s, _wctomb_s_l
WideCharToMultiByte