Condividi tramite


mbstowcs, _mbstowcs_l

Converte una sequenza di caratteri multibyte a una sequenza corrispondente di caratteri di tipo " wide ".Più versioni sicure di queste funzioni sono disponibili, vedere mbstowcs_s, _mbstowcs_s_l.

size_t mbstowcs(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count 
);
size_t _mbstowcs_l(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t mbstowcs(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _mbstowcs_l(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

Parametri

  • [out] wcstr
    L'indirizzo di una sequenza di caratteri di tipo " wide ".

  • [in] mbstr
    l'indirizzo di una sequenza di caratteri multibyte con terminazione null.

  • [in] count
    Il numero massimo di caratteri multibyte da convertire.

  • [in] locale
    le impostazioni locali da utilizzare.

Valore restituito

se mbstowcs correttamente converte la stringa di origine, restituisce il numero di caratteri multibyte convertiti.se wcstr l'argomento è NULL, la funzione restituisce la dimensione richiesta (i caratteri di tipo " wide ") della stringa di destinazione.se mbstowcs rileva un carattere multibyte non valido, restituisce a 1.se il valore restituito è count, la stringa di caratteri estesi non è con terminazione null.

Nota sulla sicurezzaNota sulla sicurezza

Assicurarsi che wcstr e mbstr non si sovrappone e quello count correttamente riflette il numero di caratteri multibyte per la conversione.

Note

mbstowcs la funzione di conversione fino al numero massimo di count caratteri multibyte operazioni da mbstr in una stringa di caratteri di tipo " wide " corrispondenti sono determinati dalle impostazioni locali correnti.Archivia la stringa con caratteri estesi risultante all'indirizzo rappresentato da wcstr*.* Il risultato è simile a una serie di chiamate a mbtowc.se mbstowcs rileva (" a byte singolo \ 0 " del carattere null) o prima o dopo count si verifica, converte il carattere null a un carattere null a caratteri estesi (" \ 0 ") e interruzioni.Pertanto la stringa con caratteri estesi a wcstr è con terminazione null solo se un carattere null viene rilevato durante la conversione.Se le sequenze puntassero da wcstr e mbstr la sovrapposizione, il comportamento è definita.

se wcstr l'argomento è NULL, mbstowcs restituisce il numero di caratteri di tipo " wide " che deriverebbero da conversione, a esclusione di un carattere di terminazione null.La stringa di origine sia con terminazione null per il valore corretto venga restituita.Se si richiede una stringa di caratteri estesi risultante di essere con terminazione null, aggiungerne uno al valore restituito.

se mbstr l'argomento è NULL, o se count è > INT_MAX, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri .Se l'esecuzione è consentita per continuare, il errno è impostato su EINVAL e la funzione restituisce -1.

mbstowcs utilizza le impostazioni locali correnti per il comportamento impostazioni locali-dipendente; _mbstowcs_lè identico con la differenza che utilizza le impostazioni locali passate in alternativa.Per ulteriori informazioni, vedere Impostazioni locali.

In C++, queste funzioni presentano overload del modello da richiamare le più recenti, controparti sicure di queste funzioni.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.

Requisiti

routine

Intestazione di associazione

mbstowcs

<definito>

_mbstowcs_l

<definito>

per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.

Esempio

// crt_mbstowcs.c
// compile with: /W3
// illustrates the behavior of the mbstowcs function

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main( void )
{
    size_t size;
    int nChar = 2; // number of characters to convert
    int requiredSize;

    unsigned char    *pmbnull  = NULL;
    unsigned char    *pmbhello = NULL;
    char* localeInfo;
    
    wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters
    wchar_t *pwc;

    /* Enable the Japanese locale and codepage */
    localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");
    printf("Locale information set to %s\n", localeInfo);
    
    printf( "Convert to multibyte string:\n" );

    requiredSize = wcstombs( NULL, pwchello, 0); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    printf("  Required Size: %d\n", requiredSize);

    /* Add one to leave room for the null terminator. */
    pmbhello = (unsigned char *)malloc( requiredSize + 1);
    if (! pmbhello)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    if (size == (size_t) (-1))
    {
        printf("Couldn't convert string. Code page 932 may"
                " not be available.\n");
        return 1;
    }
    printf( "  Number of bytes written to multibyte string: %u\n",
            (unsigned int) size );
    printf( "  Hex values of the " );
    printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",
            pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );
    printf( "  Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");

    printf( "Convert back to wide-character string:\n" );

    /* Assume we don't know the length of the multibyte string.
     Get the required size in characters, and allocate enough space. */

    requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996
    /* Add one to leave room for the NULL terminator */
    pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
    if (! pwc)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996
    if (size == (size_t) (-1))
    {
       printf("Couldn't convert string--invalid multibyte character.\n");
    }
    printf( "  Characters converted: %u\n", (unsigned int)size );
    printf( "  Hex value of first 2" );
    printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );
    free(pwc);
    free(pmbhello);
}
  
  

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Conversione di dati

Impostazioni locali

Interpretazione delle sequenze di caratteri multibyte

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar