mbstowcs, _mbstowcs_l

Çok baytlı karakter dizisini, karşılık gelen geniş karakter dizisine dönüştürür. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. mbstowcs_s, _mbstowcs_s_l.

Sözdizimi

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

wcstr
Geniş karakter dizisinin adresi.

mbstr
Null olarak sonlandırılan çok baytlı karakter dizisinin adresi.

count
Dönüştürülecek en fazla çok baytlı karakter sayısı.

locale
Kullanılacak yerel ayar.

Dönüş değeri

Kaynak dizeyi başarıyla dönüştürürse mbstowcs , dönüştürülen çok baytlı karakterlerin sayısını döndürür. wcstr Bağımsız değişken iseNULL, işlev hedef dizenin gerekli boyutunu (geniş karakterlerle) döndürür. Geçersiz bir çok baytlı karakterle karşılaşırsa mbstowcs - 1 döndürür. Dönüş değeri ise count, geniş karakterli dize null olarak sonlandırılmamıştır.

Önemli

ve mbstr değerlerinin wcstr çakışmadığından ve count dönüştürülecek çok baytlı karakter sayısını doğru yansıttığından emin olun.

Açıklamalar

İşlev, mbstowcs işaret ettiği mbstr en fazla çok çok baytlı karakter sayısınıcount, geçerli yerel ayar tarafından belirlenen ilgili geniş karakterlerden oluşan bir dizeye dönüştürür. Elde edilen geniş karakterli dizeyi tarafından wcstrtemsil edilen adreste depolar. Sonuç, öğesine yapılan bir dizi çağrıya mbtowcbenzer. Tek baytlık null karakterle ('\0') daha önce veya oluştuğunda count karşılaşırsambstowcs, null karakteri geniş karakterli null karaktere (L'\0') dönüştürür ve durur. Bu nedenle' deki wcstr geniş karakterli dize null olarak sonlandırılır, ancak dönüştürme sırasında null karakterle karşılaşılırsa. Tarafından işaret edilen wcstr ve mbstr çakışan diziler, davranış tanımlanmamıştır.

wcstr Bağımsız değişken iseNULL, mbstowcs null sonlandırıcı dahil olmak üzere dönüştürmeden kaynaklanan geniş karakter sayısını döndürür. Doğru değerin döndürülebilmesi için kaynak dize null olarak sonlandırılmalıdır. Sonuçta elde edilen geniş karakter dizesinin null ile sonlandırılması gerekiyorsa, döndürülen değere bir tane ekleyin.

mbstr Bağımsız değişken NULLise veya ise>countINT_MAX, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevi -1 döndürür.

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

C++ dilinde, bu işlevlerin daha yeni ve güvenli karşılıklarını çağıran şablon aşırı yüklemeleri vardır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
mbstowcs <stdlib.h>
_mbstowcs_l <stdlib.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Ö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);
}
Locale information set to Japanese_Japan.932
Convert to multibyte string:
   Required Size: 4
   Number of bytes written to multibyte string: 4
   Hex values of the  multibyte characters: 0x82 0xa0 0x82 0xa1
   Codepage 932 uses 0x81 to 0x9f as lead bytes.

Convert back to wide-character string:
   Characters converted: 2
   Hex value of first 2 wide characters: 0x3042 0x3043

Ayrıca bkz.

Veri dönüştürme
Yerel ayar
Çok baytlı karakter dizilerinin yorumlanması
_mbclen, mblen, _mblen_l
mbtowc, _mbtowc_l
wcstombs, _wcstombs_l
wctomb, _wctomb_l
MultiByteToWideChar