Aracılığıyla paylaş


wcstombs_s, _wcstombs_s_l

Geniş karakter dizisini, karşılık gelen çok baytlı karakter dizisine dönüştürür. CRT'deki _wcstombs_lwcstombsGüvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümü.

Sözdizimi

errno_t wcstombs_s(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count
);

errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
);

template <size_t size>
errno_t wcstombs_s(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count
); // C++ only

template <size_t size>
errno_t _wcstombs_s_l(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
); // C++ only

Parametreler

pReturnValue
Dönüştürülen dizenin bayt cinsinden boyutu (null sonlandırıcı dahil).

mbstr
Sonuçta dönüştürülen çok baytlı karakter dizesi için arabelleğin adresi.

sizeInBytes
Arabelleğin mbstr bayt cinsinden boyutu.

wcstr
Dönüştürülecek geniş karakter dizesini gösterir.

count
Sonlandırıcı null karakteri veya _TRUNCATEdahil olmak üzere arabellekte mbstr depolanmaya yönelik bayt sayısı üst sınırı.

locale
Kullanılacak yerel ayar.

Dönüş değeri

Başarılı olursa sıfır, hata durumunda bir hata kodu.

Hata koşulu Dönüş değeri ve errno
mbstr ve NULLsizeInBytes> 0 EINVAL
wcstrNULL EINVAL
Hedef arabellek dönüştürülen dizeyi içeremeyecek kadar küçük (değilse count_TRUNCATE, aşağıdaki Açıklamalar'a bakın) ERANGE

Bu koşullardan herhangi biri oluşursa, parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre özel durumu çağrılır. Yürütmenin devam etmesi için izin verilirse işlev bir hata kodu döndürür ve tabloda gösterildiği gibi ayarlar errno .

Açıklamalar

işlevi, wcstombs_s tarafından işaret edilen geniş karakterlerden oluşan bir dizeyi wcstr , tarafından işaret edilen arabellekte depolanan çok baytlı karakterlere mbstrdönüştürür. Dönüştürme, bu koşullardan biri karşılanıncaya kadar her karakter için devam eder:

  • Null geniş karakterle karşılaşıldı

  • Dönüştürülemez geniş bir karakterle karşılaşılır

  • Arabellekte mbstr depolanan bayt sayısı eşittir count.

Hedef dize her zaman null olarak sonlandırılır (hata olsa bile).

özel değer _TRUNCATEisecount, wcstombs_s hedef arabelleğe sığacak kadar dizeyi dönüştürür ve null sonlandırıcı için yer bırakmaya devam eder. Dize kesilirse, dönüş değeri olur STRUNCATEve dönüştürme başarılı kabul edilir.

Kaynak dizeyi başarıyla dönüştürürse wcstombs_s , boyutu null sonlandırıcı da dahil olmak üzere dönüştürülen dizenin bayt cinsinden değerini içine *pReturnValue yerleştirir (sağlanmamıştır pReturnValueNULL). Bağımsız değişken NULLolsa mbstr bile boyut hesaplanır; gerekli arabellek boyutunu belirlemek için bir yol sağlar. ise mbstrNULLcount yoksayılır.

Çok baytlı bir karaktere dönüştüremediğiniz geniş bir karakterle karşılaşırsawcstombs_s, içine 0 *ReturnValueekler, hedef arabelleği boş bir dizeye ayarlar, olarak EILSEQayarlar errno ve döndürürEILSEQ.

Tarafından işaret edilen wcstr ve mbstr çakışan diziler, davranışı wcstombs_s tanımlanmamıştır.

Önemli

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

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

C++'ta bu işlevlerin kullanılması şablon aşırı yüklemeleriyle basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarabilir (boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır) ve eski, güvenli olmayan işlevleri yeni ve güvenli karşılıklarıyla otomatik olarak değiştirebilir. 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_s <stdlib.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

Bu program işlevin wcstombs_s davranışını gösterir.

// crt_wcstombs_s.c
// This example converts a wide character
// string to a multibyte character string.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t i;
    char *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    const wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

    // Conversion
    wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE,
               pWCBuffer, (size_t)BUFFER_SIZE - 1); // -1 so the appended NULL doesn't fall outside the allocated buffer

    // Output
    printf("   Characters converted: %u\n", i);
    printf("    Multibyte character: %s\n\n", pMBBuffer );

    // Free multibyte character buffer
    if (pMBBuffer)
    {
        free(pMBBuffer);
    }
    
    return 0;
}
Convert wide-character string:
   Characters converted: 14
    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_s, _wctomb_s_l
WideCharToMultiByte