mbstowcs, _mbstowcs_l
Çok baytlı karakter dizisi ilgili geniş bir karakter dizisi için dönüştürür.Bu işlevler daha güvenli sürümlerinin kullanılabilir olduğunu; see 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 adresidir.[in]mbstr
Adresi, bir dizi null, çok baytlı karakterleri 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
mbstowcs Başarıyla kaynak dize dönüştürür dönüştürülen çok baytlı karakterlerin sayısını verir.wcstr Bağımsız değişkeni NULL, gerekli boyutunu (geniş karakter) hedef dize işlev verir.mbstowcs Geçersiz bir çok baytlı karakter karşılaşır –1 değerini döndürür.Dönüş değeri ise count, geniş karakter dizesinin boş sonlandırılmış değil.
Güvenlik Notu |
---|
Emin wcstr ve mbstr üst üste ve count doğru şekilde dönüştürmek için çok baytlı karakter sayısını yansıtır. |
Notlar
mbstowcs İşlevi dönüştüren bir sayısı kadar count için çok baytlı karakterleri işaret tarafından mbstr için geçerli yerel ayarı tarafından belirlenen ilgili geniş karakterden oluşan bir dize.Gösterdiği adresteki sonuç geniş karakter dizesi depolayan wcstr*.* Bir dizi çağrı sonucu benzer mbtowc.mbstowcs Önce ya da ne zaman tek baytlık boş karakter ('\0') karşılaştığı count dönüştürür geniş karakter null karakteri (l '\0') için boş karakter ve durduğunda gerçekleşir.Böylece en geniş karakter dizesi wcstr boş karakter dönüştürme sırasında karşılaşılırsa biten.Sıraları göre sıralanmasını, wcstr ve mbstr üst üste davranışı tanımsız.
wcstr Bağımsız değişkeni NULL, mbstowcs null Sonlandırıcı dahil edilmez, dönüştürme işlemi olacak geniş karakter sayısını verir.Kaynak dizesi döndürülecek doğru değeri boş sonlandırılmış olmalıdır.Biten olarak ortaya çıkan geniş karakter dizesi gerekiyorsa, döndürülen değere ekleyin.
If the mbstr argument is NULL, or if count is > INT_MAX, geçersiz parametre işleyicisi, açıklandığı şekilde çağrılır Parametre doğrulama .Yürütülmesine devam etmek için izin verilirse, hatano ayarlamak EINVAL ve işlev-1 değerini döndürür.
mbstowcsGeçerli yerel ayarı herhangi bir yerel ayara bağımlı davranışını kullanır; _mbstowcs_l Bunun yerine geçirilen yerel kullanır dışında aynıdır.Daha fazla bilgi için bkz. Yerel ayar.
C++'da, bu işlevlerin daha yeni ve güvenli karşılıkları çağırmak şablon aşırı bu işlevleri vardır.Daha fazla bilgi için bkz. Güvenli şablon aşırı yükleme.
Gereksinimler
Yordamı |
Gerekli başlık |
---|---|
mbstowcs |
<stdlib.h> |
_mbstowcs_l |
<stdlib.h> |
Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.
Ö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
Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.