Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Converta um caractere largo em sua representação de caracteres multibyte. Uma versão de wcrtomb
com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
errno_t wcrtomb_s(
size_t *pReturnValue,
char *mbchar,
size_t sizeOfmbchar,
wchar_t *wchar,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
size_t *pReturnValue,
char (&mbchar)[size],
wchar_t *wchar,
mbstate_t *mbstate
); // C++ only
Parâmetros
pReturnValue
Retorna o número de bytes gravados ou –1 em caso de erro.
mbchar
O caractere multibyte convertido resultante.
sizeOfmbchar
O tamanho da variável mbchar
em bytes.
wchar
Um caractere largo a ser convertido.
mbstate
Um ponteiro para um objeto mbstate_t
.
Valor retornado
Retorna zero ou um valor errno
em caso de erro.
Comentários
A função wcrtomb_s
converte um caractere largo que começa no estado da conversão especificado contido em mbstate
, com base no valor contido em wchar
, no endereço representado por mbchar
. O valor pReturnValue
será o número de bytes convertidos, mas não mais de MB_CUR_MAX
bytes ou –1 em caso de erro.
Se mbstate
for nulo, o estado da conversão mbstate_t
interno será usado. Se o caractere contido em wchar
não tiver um caractere multibyte correspondente, o valor de pReturnValue
será -1 e a função retornará o errno
valor de EILSEQ
.
A wcrtomb_s
função difere de , _wctomb_s_l
por sua capacidade de wctomb_s
reinicialização. O estado da conversão é armazenado em mbstate
para chamadas posteriores às mesmas funções ou a outras funções reiniciáveis. Os resultados são indefinidos ao combinar o uso de funções reiniciáveis e não reiniciáveis. Por exemplo, um aplicativo usaria wcsrlen
em vez de wcslen
se uma chamada subsequente a wcsrtombs_s
fosse usada em vez de wcstombs_s
.
Em C++, o uso dessa função é 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.
Exceções
A função wcrtomb_s
será multithread-safe contanto que nenhuma função no thread atual chame setlocale
enquanto essa função estiver em execução e o mbstate
for nulo.
Exemplo
// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
errno_t returnValue;
size_t pReturnValue;
mbstate_t mbstate;
size_t sizeOfmbStr = 1;
char mbchar = 0;
wchar_t* wchar = L"Q\0";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
*wchar, &mbstate);
if (returnValue == 0) {
printf("The corresponding wide character \"");
wprintf(L"%s\"", wchar);
printf(" was converted to a the \"%c\" ", mbchar);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
wcrtomb_s |
<wchar.h> |
Confira também
Conversão de dados
Localidade
Interpretação de sequências de caracteres multibyte
mbsinit