wcsrtombs_s
Geniş karakter dizesini çok baytlı karakter dizesi gösterimine dönüştürün. CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümüwcsrtombs
.
Sözdizimi
errno_t wcsrtombs_s(
size_t *pReturnValue,
char *mbstr,
size_t sizeInBytes,
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcsrtombs_s(
size_t *pReturnValue,
char (&mbstr)[size],
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
); // 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
Arabellekte _TRUNCATE
veya içinde mbstr
depolanacak en fazla bayt sayısı.
mbstate
Dönüştürme durumu nesnesinin mbstate_t
işaretçisi.
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ğrulaması 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, wcsrtombs_s
içinde bulunan mbstate
dönüştürme durumunu kullanarak, tarafından işaret edilen wcstr
geniş karakter dizesini, 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
, wcsrtombs_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.
Kaynak dizeyi başarıyla dönüştürürse wcsrtombs_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şırsawcsrtombs_s
, içine -1 *pReturnValue
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ışı wcsrtombs_s
tanımlanmamıştır. wcsrtombs_s
geçerli yerel ayarın LC_TYPE kategorisinden etkilenir.
Ö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.
İşlev, wcsrtombs_s
yeniden başlatılabilirliğine göre işlevinden _wcstombs_s_l
wcstombs_s
farklıdır. Dönüştürme durumu, aynı veya diğer yeniden başlatılabilir işlevlere yapılan sonraki çağrılar için içinde mbstate
depolanır. Yeniden başlatılabilir ve yeniden başlatılamayan işlevlerin kullanımı karıştırılırken sonuçlar tanımlanmamıştır. Örneğin, yerine sonraki bir çağrısı kullanıldıysa, bir uygulama yerine wcstombs_s
kullanır wcsrlen
wcslen
.wcsrtombs_s
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.
Özel durumlar
Bu wcsrtombs_s
işlev yürütülürken geçerli iş parçacığı setlocale
çağrılarında işlev olmadığı ve mbstate
null olduğu sürece işlev çok iş parçacıklı güvenlidir.
Örnek
// crt_wcsrtombs_s.cpp
//
// This code example converts a wide
// character string into a multibyte
// character string.
//
#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>
#define MB_BUFFER_SIZE 100
int main()
{
const wchar_t wcString[] =
{L"Every good boy does fine."};
const wchar_t *wcsIndirectString = wcString;
char mbString[MB_BUFFER_SIZE];
size_t countConverted;
errno_t err;
mbstate_t mbstate;
// Reset to initial shift state
::memset((void*)&mbstate, 0, sizeof(mbstate));
err = wcsrtombs_s(&countConverted, mbString, MB_BUFFER_SIZE,
&wcsIndirectString, MB_BUFFER_SIZE, &mbstate);
if (err == EILSEQ)
{
printf( "An encoding error was detected in the string.\n" );
}
else
{
printf( "The string was successfully converted.\n" );
}
}
The string was successfully converted.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
wcsrtombs_s |
<wchar.h> |
Ayrıca bkz.
Veri dönüştürme
Yerel ayar
Çok baytlı karakter dizilerinin yorumlanması
wcrtomb
wcrtomb_s
wctomb
, _wctomb_l
wcstombs
, _wcstombs_l
mbsinit