Aracılığıyla paylaş


mbstowcs, _mbstowcs_l

Çok baytlı bir karakter dizisi ilgili geniş bir karakter dizisi için dönüştürür.Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. 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

Parametreler

  • [Çıkış] wcstr
    Geniş bir karakter dizisi adresi.

  • [in] mbstr
    Adres, boş bir dizi çok baytlı karakter sonlandırıldı.

  • [in] count
    Çok baytlı karakterlere dönüştürmek için en fazla sayısı.

  • [in] locale
    Kullanılacak yerel ayar.

Dönüş Değeri

Yoksa mbstowcs başarıyla kaynak dize dönüştürür dönüştürülmüş çok baytlı karakter sayısını verir.Yoksa wcstr bağımsız değişkeni NULL, gerekli boyutunu (geniş karakter) hedef dize işlev verir.Yoksa mbstowcs geçersiz bir çok baytlı karakter, karşılaştığı –1 değerini döndürür.Dönüş değeri ise count, geniş karakter dizesi null sonlandırılmış değil.

Güvenlik NotuGüvenlik Notu

Emin olmak wcstr ve mbstr üst üste ve count dönüştürmek için çok baytlı karakter sayısını doğru olarak yansıtır.

Notlar

mbstowcs Kadar en fazla sayıda işlev dönüştürür count tarafından çok baytlı karakterleri gösterdiği için mbstr için geçerli yerel ayarı tarafından belirlenen ilgili geniş karakter dizesi.Gösterdiği adresteki sonuç geniş karakter dizesi depolayan wcstr*.* Sonuç aramaları için bir dizi benzer mbtowc.Yoksa mbstowcs önce ya da ne zaman tek baytlık boş karakter ('\0') karşılaştığında count dönüştüren bir geniş karakter null karakteri (L '\0') için null karakteri ve durduğunda oluşur.Bu nedenle geniş karakter dizesi, wcstr boş karakter dönüştürme sırasında karşılaşıldığında sonlandırılmış.Dizileri tarafından işaret, wcstr ve mbstr üst üste davranıştır tanımlanmamış.

Yoksa wcstr bağımsız değişkeni NULL, mbstowcs dönüştürme null bir sonlandırıcıya hariç, oluşacak geniş karakter sayısını verir.Kaynak dizesi döndürülecek doğru değeri null sonlandırılmış olmalıdır.Null sonlandırılmış olacak şekilde sonuç geniş karakter dizesi gerekiyorsa, döndürülen değeri için bir tane ekleyin.

Yoksa mbstr bağımsız değişkeni NULL, veya count olan >INT_MAX, açıklandığı gibi geçersiz bir parametre işleyici çağrılır Parametre Doğrulama .Yürütülmesine devam etmek için izin verilirse, hatano ayarlanır EINVAL ve işlevi-1 değerini döndürür.

mbstowcsGeçerli yerel ayarı için herhangi bir yerel ayara bağımlı davranışı kullanır; _mbstowcs_l yerine geçirilen yerel ayar kullanır dışında aynıdır.Daha fazla bilgi için bkz. Yerel Ayar.

C++ dilinde, bu işlevlerin daha yeni ve güvenli karşıtlarını başlatan şablon aşırı yüklemeleri vardır.Daha fazla bilgi için bkz. Güvenli Şablon Aşırı Yüklemeleri.

Gereksinimler

Yordam

Gerekli başlık

mbstowcs

<stdlib.h>

_mbstowcs_l

<stdlib.h>

Ek uyumluluk bilgileri için Giriş altındaki Uyumluluk bölümüne bakın.

Örnek

// 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);
}
  

.NET Framework Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Veri Dönüştürme

Yerel Ayar

Çok Baytlı Karakter Sıralarının Yorumu

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar