wcstombs_s
, _wcstombs_s_l
Converte uma sequência de caracteres largos em uma sequência de caracteres multibyte correspondente. Uma versão do , com aprimoramentos de segurança, _wcstombs_l
conforme descrito em Recursos de segurança no CRT.wcstombs
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 de caracteres convertida, incluindo o terminador nulo.
mbstr
O endereço de um buffer da cadeia de caracteres multibyte convertida resultante.
sizeInBytes
O tamanho em bytes do buffer mbstr
.
wcstr
Aponta para a cadeia de caracteres largos a ser convertida.
count
O número máximo de bytes a ser armazenado no buffer mbstr
, não incluindo o caractere nulo de terminação ou em _TRUNCATE
.
locale
A localidade a ser usada.
Valor retornado
Zero se for bem-sucedido ou 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 cadeia de caracteres convertida (a menos que count seja _TRUNCATE ; consulte Comentários abaixo) |
ERANGE |
Se qualquer uma dessas condições ocorrer, a exceção de parâmetro inválido será invocada conforme descrito em Validação de parâmetro. Se a execução puder continuar, a função retornará um código de erro e definirá errno
conforme indicado na tabela.
Comentários
A função wcstombs_s
converte uma cadeia de caracteres largos apontada por wcstr
em caracteres multibyte armazenados no buffer apontado por mbstr
. A conversão continuará para cada caractere até que uma das seguintes condições seja atendida:
Um caractere largo nulo é encontrado
Um caractere largo que não pode ser convertido é encontrado
O número de bytes armazenados no buffer
mbstr
é igual acount
.
A cadeia de caracteres de destino é sempre terminada em nulo (mesmo se houver um erro).
Se count
for o valor especial _TRUNCATE
, wcstombs_s
converterá o máximo da cadeia de caracteres que caberá no buffer de destino ainda deixando espaço para um terminador nulo. Se a cadeia de caracteres estiver truncada, o valor retornado será STRUNCATE
e a conversão será considerada bem-sucedida.
Se wcstombs_s
converter com êxito a cadeia de caracteres de origem, ele colocará o tamanho em bytes da cadeia de caracteres convertida, incluindo o terminador nulo, em *pReturnValue
(provided pReturnValue
isn't NULL
). O tamanho é calculado mesmo se o mbstr
argumento for NULL
; ele fornece uma maneira de determinar o tamanho do buffer necessário. Se mbstr
for NULL
, count
será ignorado.
Se wcstombs_s
encontrar um caractere largo que não pode ser convertido em um caractere multibyte, ele coloca 0 em *ReturnValue
, define o buffer de destino como uma string vazia, define errno
como EILSEQ
e retorna EILSEQ
.
Se as sequências apontadas por wcstr
e por mbstr
se sobrepuserem, o comportamento de wcstombs_s
será indefinido.
Importante
Verifique se wcstr
e mbstr
não se sobrepõem e se count
reflete corretamente o número de caracteres largos a ser convertido.
wcstombs_s
usa a localidade atual de qualquer comportamento dependente da localidade; _wcstombs_s_l
é idêntico a wcstombs
, exceto que, em vez disso, ele usa a localidade passada. Para obter mais informações, consulte Localidade.
Em C++, o uso dessas funções é simplificado pelas sobrecargas de modelo; as sobrecargas podem inferir o tamanho do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e podem substituir automaticamente funções mais antigas e não seguras por suas equivalentes mais recentes e seguras. Para obter mais informações, consulte Sobrecargas de modelo seguras.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
wcstombs_s |
<stdlib.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
Este programa ilustra o comportamento da função 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 );
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.
Confira também
Conversão de dados
Localidade
_mbclen
, mblen
, _mblen_l
mbstowcs
, _mbstowcs_l
mbtowc
, _mbtowc_l
wctomb_s
, _wctomb_s_l
WideCharToMultiByte