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 wcstr
temsil edilen adreste depolar. Sonuç, öğesine yapılan bir dizi çağrıya mbtowc
benzer. 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 NULL
ise veya ise>count
INT_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