wcstombs_s
, _wcstombs_s_l
Geniş karakter dizisini, karşılık gelen çok baytlı karakter dizisine dönüştürür. CRT'deki _wcstombs_l
wcstombs
Gü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 _TRUNCATE
dahil 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 NULL sizeInBytes > 0 |
EINVAL |
wcstr dir NULL |
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 mbstr
dö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şittircount
.
Hedef dize her zaman null olarak sonlandırılır (hata olsa bile).
özel değer _TRUNCATE
isecount
, 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 STRUNCATE
ve 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 pReturnValue
NULL
). Bağımsız değişken NULL
olsa mbstr
bile boyut hesaplanır; gerekli arabellek boyutunu belirlemek için bir yol sağlar. ise mbstr
NULL
count
yoksayılır.
Çok baytlı bir karaktere dönüştüremediğiniz geniş bir karakterle karşılaşırsawcstombs_s
, içine 0 *ReturnValue
ekler, hedef arabelleği boş bir dizeye ayarlar, olarak EILSEQ
ayarlar 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