wcstombs
, _wcstombs_l
Geniş karakter dizisini, karşılık gelen çok baytlı karakter dizisine dönüştürür. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. wcstombs_s
, _wcstombs_s_l
.
Sözdizimi
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
size_t _wcstombs_l(
char *mbstr,
const wchar_t *wcstr,
size_t count,
_locale_t locale
);
template <size_t size>
size_t wcstombs(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count
); // C++ only
template <size_t size>
size_t _wcstombs_l(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count,
_locale_t locale
); // C++ only
Parametreler
mbstr
Çok baytlı karakter dizisinin adresi.
wcstr
Geniş karakter dizisinin adresi.
count
Çok baytlı çıkış dizesinde depolanabilecek en fazla bayt sayısı.
locale
Kullanılacak yerel ayar.
Dönüş değeri
Çok baytlı dizeyi başarıyla dönüştürürse wcstombs
, sonlandırma NULL
(varsa) hariç, çok baytlı çıkış dizesine yazılan bayt sayısını döndürür. mbstr
Bağımsız değişken iseNULL
, wcstombs
hedef dizenin bayt cinsinden gerekli boyutunu döndürür. Çok baytlı bir karaktere dönüştüremediğiniz geniş bir karakterle karşılaşırsa wcstombs
, yazmak size_t
için -1 atama döndürür ve olarak ayarlar errno
EILSEQ
.
Açıklamalar
işlevi tarafından wcstombs
işaret edilen geniş karakterli dizeyi wcstr
karşılık gelen çok baytlı karakterlere dönüştürür ve sonuçları dizide mbstr
depolar. parametresi, count
çok baytlı çıkış dizesinde depolanabilecek bayt sayısı üst sınırını ( mbstr
boyutu) gösterir. Genel olarak, geniş karakterli bir dize dönüştürülürken kaç bayt gerekeceği bilinmemektedir. Bazı geniş karakterler çıkış dizesinde yalnızca tek bir bayt gerektirir; diğerleri 2 bayt gerektirir. Giriş dizesindeki her geniş karakter (geniş NULL
karakter dahil) için çok baytlı çıkış dizesinde 2 bayt varsa, sonucun sığması garanti edilir.
Windows 10 sürüm 1803 'den (10.0.17134.0) başlayarak, Universal C Çalışma Zamanı UTF-8 kod sayfası kullanmayı destekler. Her geniş karakter için iki bayta ihtiyacınız olacağını varsaymak yeterli olmadığından, dönüştürme için ihtiyacınız olan doğru boyutu elde etmek için kullanın wcstombs(NULL, wcstr, 0)
. UTF-8 desteği hakkında daha fazla bilgi için bkz . UTF-8 desteği
Geniş karakterli NULL
karakterle (L'\0') daha önce veya oluştuğunda count
karşılaşırsawcstombs
, bunu 8 bit 0'a dönüştürür ve durur. Bu nedenle, konumundaki mbstr
çok baytlı karakter dizesi null olarak sonlandırılır ancak dönüştürme sırasında geniş karakterli NULL
bir karakterle karşılaşırsa wcstombs
sonlandırılır. Tarafından işaret edilen wcstr
ve mbstr
çakışan diziler, davranışı wcstombs
tanımlanmamıştır.
mbstr
Bağımsız değişken iseNULL
, wcstombs
hedef dizenin bayt cinsinden gerekli boyutunu döndürür.
wcstombs
parametrelerini doğrular. NULL
ise wcstr
veya değerinden INT_MAX
büyüksecount
, bu işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, işlevi olarak EINVAL
ayarlanır errno
ve -1 döndürür.
wcstombs
yerel ayara bağımlı herhangi bir davranış için geçerli yerel ayarı kullanır; _wcstombs_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 |
---|---|
wcstombs |
<stdlib.h> |
_wcstombs_l |
<stdlib.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
Bu program işlevin wcstombs
davranışını gösterir.
// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of
// multibyte characters.
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc( BUFFER_SIZE );
wchar_t *pWCBuffer = L"Hello, world.";
printf("Convert wide-character string:\n" );
count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s instead
printf(" Characters converted: %u\n",
count );
printf(" Multibyte character: %s\n\n",
pMBBuffer );
free(pMBBuffer);
}
Convert wide-character string:
Characters converted: 13
Multibyte character: Hello, world.
Ayrıca bkz.
Veri dönüştürme
Yerel ayar
_mbclen
, mblen
, _mblen_l
mbstowcs
, _mbstowcs_l
mbtowc
, _mbtowc_l
wctomb
, _wctomb_l
WideCharToMultiByte