Condividi tramite


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