wcrtomb_s
Converta um caractere largo em sua representação de caracteres multibyte.Uma versão do wcrtomb com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
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
[out]pReturnValue
Retorna o número de bytes gravados ou -1 se ocorreu um erro.[out]mbchar
O multibyte resultante é convertido em caracteres.[in]sizeOfmbchar
O tamanho da mbchar variável em bytes.[in]wchar
Um caractere largo para converter.[in]mbstate
Um ponteiro para um mbstate_t objeto.
Valor de retorno
Retorna zero ou um errno valor se ocorrer um erro.
Comentários
O wcrtomb_s função converte um caractere largo, começando no estado de conversão especificada contido no mbstate, do valor contido no wchar, no endereço representado por mbchar.O pReturnValue valor será o número de bytes convertidos, mas não mais de MB_CUR_MAX bytes, ou um -1 se ocorreu um erro.
Se mbstate for nulo, o interno mbstate_t estado de conversão é usado.Se o caractere contido no wchar não tem um caractere multibyte correspondente, o valor de pReturnValue será -1 e a função retornará o errno valor de EILSEQ.
O wcrtomb_s função difere wctomb_s, _wctomb_s_l por sua capacidade de reinicialização.O estado de conversão é armazenado em mbstate para chamadas subseqüentes para o mesmo ou outras funções reinicializáveis.Os resultados são indefinidos ao combinar o uso de funções reiniciáveis e não reiniciável.Por exemplo, um aplicativo deve usar wcsrlen em vez de wcslen, se uma chamada subseqüente para wcsrtombs_s foram usados em vez dewcstombs_s.
No C++, usar esta função é simplificada pelo sobrecargas do modelo; os métodos sobrecarregados podem inferir o comprimento do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e eles podem substituir automaticamente os funções não seguras, mais antigas, com suas contrapartes mais recentes e seguras.Para obter mais informações, consulte Proteger Overloads de modelo.
Exceções
O wcrtomb_s função é seguro com vários threads, desde que nenhuma função no segmento atual chama setlocale enquanto esta função está sendo executado e o mbstate é 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");
}
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
wcrtomb_s |
<wchar.h> |