Aracılığıyla paylaş


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 errnoEILSEQ.

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ı ( mbstrboyutu) 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ş NULLkarakter 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. NULLise wcstr veya değerinden INT_MAXbü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