wcrtomb_s
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