wcrtomb
Converte un carattere wide nella relativa rappresentazione di caratteri multibyte. È disponibile una versione più sicura di questa funzione; vedere wcrtomb_s
.
Sintassi
size_t wcrtomb(
char *mbchar,
wchar_t wchar,
mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
char (&mbchar)[size],
wchar_t wchar,
mbstate_t *mbstate
); // C++ only
Parametri
mbchar
Carattere multibyte convertito risultante.
wchar
Carattere wide da convertire.
mbstate
Puntatore a un oggetto mbstate_t
.
Valore restituito
Restituisce il numero di byte necessari per rappresentare il carattere multibyte convertito. In caso contrario restituisce -1 se si verifica un errore.
Osservazioni:
La funzione wcrtomb
converte un carattere wide, a partire dallo stato di conversione specificato contenuto in mbstate
, dal valore contenuto in wchar
, nell'indirizzo rappresentato da mbchar
. Il valore restituito è il numero di byte necessari per rappresentare il carattere multibyte corrispondente, ma non verranno restituiti più di MB_CUR_MAX
byte.
Se mbstate
è Null, viene usato l'oggetto mbstate_t
interno contenente lo stato di conversione di mbchar
. Se la sequenza wchar
di caratteri non ha una rappresentazione di caratteri multibyte corrispondente, viene restituito un -1 e viene errno
impostato su EILSEQ
.
La wcrtomb
funzione differisce da wctomb
, _wctomb_l
in base alla riavviibilità. Lo stato di conversione viene archiviato in mbstate
per le chiamate successive alle stesse o ad altre funzioni riavviabili. I risultati non sono definiti quando si usano insieme funzioni riavviabili e non riavviabili. Ad esempio, un'applicazione deve usare wcsrlen
anziché wcsnlen
se viene usata una chiamata successiva a wcsrtombs
invece di wcstombs
.
In C++, per questa funzione è disponibile un overload del modello che richiama le relative controparti sicure più recenti. Per altre informazioni, vedere Proteggere gli overload dei modelli.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Eccezioni
La funzione wcrtomb
è multithread-safe a condizione che nessuna funzione nel thread corrente chiami setlocale
mentre questa funzione è in esecuzione e mentre mbstate
è Null.
Esempio
// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
size_t sizeOfCovertion = 0;
mbstate_t mbstate;
char mbStr = 0;
wchar_t* wcStr = L"Q";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
// Note: wcrtomb is deprecated; consider using wcrtomb_s instead
if (sizeOfCovertion > 0)
{
printf("The corresponding wide character \"");
wprintf(L"%s\"", wcStr);
printf(" was converted to the \"%c\" ", mbStr);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to the "Q" multibyte character.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
wcrtomb |
<wchar.h> |
Vedi anche
Conversione dati
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
mbsinit