Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Converte uma cadeia de caracteres largos em sua representação de cadeia de caracteres multibyte. Uma versão mais segura dessa função está disponível, confira wcsrtombs_s.
Sintaxe
size_t wcsrtombs(
char *mbstr,
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
char (&mbstr)[size],
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
); // C++ only
Parâmetros
mbstr
O local do endereço da cadeia de caracteres multibyte convertida resultante.
wcstr
Aponta indiretamente para o local da cadeia de caracteres largos a ser convertida.
count
O número de caracteres a serem convertidos.
mbstate
Um ponteiro para um objeto do estado da conversão mbstate_t.
Valor retornado
Retorna o número de bytes convertidos com êxito, não incluindo o byte nulo de terminação nula (se houver), caso contrário, retorna –1 em caso de erro.
Comentários
A função wcsrtombs converte uma cadeia de caracteres largos que começa no estado da conversão especificado contido em mbstate, com base nos valores indiretos apontados em wcstr, no endereço de mbstr. A conversão continuará para cada caractere até: um caractere largo de terminação nula ser encontrado, um caractere não correspondente ser encontrado ou o próximo caractere exceder o limite contido em count. Se wcsrtombs encontrar o caractere nulo de caractere largo (L'\0') antes ou quando count ocorrer, ele o converterá em um 0 de 8 bits e será interrompido.
Dessa forma, a cadeia de caracteres multibyte em mbstr será terminada em nulo somente se wcsrtombs encontrar um caractere nulo de caractere largo durante a conversão. Se as sequências apontadas por wcstr e por mbstr se sobrepuserem, o comportamento de wcsrtombs será indefinido. wcsrtombs é afetado pela categoria LC_TYPE da localidade atual.
A wcsrtombs função difere de , _wcstombs_l por sua capacidade de wcstombsreinicializaçã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 wcsnlen se uma chamada subsequente a wcsrtombs fosse usada em vez de wcstombs.
Se o argumento mbstr for NULL, wcsrtombs retornará o tamanho necessário em bytes da cadeia de caracteres de destino. Se mbstate for nulo, o estado da conversão mbstate_t interno será usado. Se a sequência wchar de caracteres não tiver uma representação de caracteres multibyte correspondente, um -1 será retornado e o errno será definido como EILSEQ.
Em C++, essa função tem uma sobrecarga de modelo que invoca o equivalente mais recente e seguro dessa função. 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 wcsrtombs função é segura para vários threads, desde que nenhuma função no thread atual chame setlocale enquanto essa função estiver em execução e não mbstate for nula.
Exemplo
// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.
#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>
#define MB_BUFFER_SIZE 100
int main()
{
const wchar_t wcString[] =
{L"Every good boy does fine."};
const wchar_t *wcsIndirectString = wcString;
char mbString[MB_BUFFER_SIZE];
size_t countConverted;
mbstate_t mbstate;
// Reset to initial shift state
::memset((void*)&mbstate, 0, sizeof(mbstate));
countConverted = wcsrtombs(mbString, &wcsIndirectString,
MB_BUFFER_SIZE, &mbstate); // C4996
// Note: wcsrtombs is deprecated; consider using wcsrtombs_s
if (errno == EILSEQ)
{
printf( "An encoding error was detected in the string.\n" );
}
else
{
printf( "The string was successfuly converted.\n" );
}
}
The string was successfuly converted.
Requisitos
| Rotina | Cabeçalho necessário |
|---|---|
wcsrtombs |
<wchar.h> |
Confira também
Conversão de dados
Localidade
Interpretação de sequências de caracteres multibyte
wcrtomb
wcrtomb_s
wctomb, _wctomb_l
wcstombs, _wcstombs_l
mbsinit