wcrtomb_s
Converte un carattere wide nella relativa rappresentazione di caratteri multibyte. Versione di con miglioramenti della wcrtomb
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
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
Parametri
pReturnValue
Restituisce il numero di byte scritti o -1 se si è verificato un errore.
mbchar
Carattere multibyte convertito risultante.
sizeOfmbchar
Dimensioni della variabile mbchar
in byte.
wchar
Carattere wide da convertire.
mbstate
Puntatore a un oggetto mbstate_t
.
Valore restituito
Restituisce zero o un valore errno
se si verifica un errore.
Osservazioni:
La funzione wcrtomb_s
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 pReturnValue
sarà il numero di byte convertiti, ma non più di MB_CUR_MAX
byte o -1 se si è verificato un errore.
Se mbstate
è Null, viene usato lo stato di conversione interno mbstate_t
. Se il carattere contenuto in wchar
non ha un carattere multibyte corrispondente, il valore di pReturnValue
è -1 e la funzione restituisce il errno
valore di EILSEQ
.
La wcrtomb_s
funzione differisce da wctomb_s
, _wctomb_s_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é wcslen
se viene usata una chiamata successiva a wcsrtombs_s
invece di wcstombs_s
.
In C++ l'uso di questa funzione è semplificato dagli overload dei modelli. Gli overload possono dedurre la lunghezza del buffer automaticamente (eliminando la necessità di specificare un argomento per le dimensioni) e possono sostituire automaticamente le funzioni precedenti e non sicure con le controparti più recenti e sicure. 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_s
è multithread-safe a condizione che nessuna funzione nel thread corrente chiami setlocale
mentre questa funzione è in esecuzione e mbstate
è Null.
Esempio
// 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.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
wcrtomb_s |
<wchar.h> |
Vedi anche
Conversione dati
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
mbsinit