Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 _TRUNCATEveya 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 mbstatedönüştürme durumunu kullanarak, tarafından işaret edilen wcstr geniş karakter dizesini, 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
mbstrdepolanan bayt sayısı eşittircount.
Hedef dize her zaman null olarak sonlandırılır (hata olsa bile).
özel değer _TRUNCATEisecount, 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 NULLolsa mbstr bile boyut hesaplanır; gerekli arabellek boyutunu belirlemek için bir yol sağlar. ise mbstr NULLcount yoksayılır.
Çok baytlı bir karaktere dönüştüremediğiniz geniş bir karakterle karşılaşırsawcsrtombs_s, içine -1 *pReturnValueekler, 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ışı 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_lwcstombs_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_skullanı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