wcsrtombs
Geniş karakter dizesini çok baytlı karakter dizesi gösterimine dönüştürün. Bu işlevin daha güvenli bir sürümü kullanılabilir; bkz wcsrtombs_s
. .
Sözdizimi
size_t wcsrtombs(
char *mbstr,
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
char (&mbstr)[size],
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
); // C++ only
Parametreler
mbstr
Sonuçta dönüştürülen çok baytlı karakter dizesinin adres konumu.
wcstr
Dolaylı olarak dönüştürülecek geniş karakter dizesinin konumunu gösterir.
count
Dönüştürülecek karakter sayısı.
mbstate
Dönüştürme durumu nesnesinin mbstate_t
işaretçisi.
Dönüş değeri
Null sonlandırıcı null bayt (varsa) dahil değil, başarıyla dönüştürülen bayt sayısını döndürür; aksi takdirde hata oluşursa -1 döndürür.
Açıklamalar
wcsrtombs
işlevi, içinde bulunan belirtilen dönüştürme durumundan başlayarak, içinde işaret edilen mbstate
dolaylı değerlerden geniş karakterlerden oluşan bir dizeyi wcstr
adresine mbstr
dönüştürür. Dönüştürme işlemi her karakter için devam edecektir: null bir geniş karakterle karşılaşıldıktan sonra, karşılık gelen olmayan bir karakterle karşılaşıldığında veya bir sonraki karakter içinde count
yer alan sınırı aştığında. Geniş karakterli null karakterle (L'\0') daha önce veya oluştuğunda count
karşılaşırsawcsrtombs
, 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ş bir karakter null karakteriyle karşılaşırsa wcsrtombs
sonlandırılır. Tarafından işaret edilen wcstr
ve mbstr
çakışan diziler, davranışı wcsrtombs
tanımlanmamıştır. wcsrtombs
geçerli yerel ayarın LC_TYPE kategorisinden etkilenir.
İşlev, wcsrtombs
yeniden başlatılabilirliğine göre işlevinden _wcstombs_l
wcstombs
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
kullanır wcsrlen
wcsnlen
.wcsrtombs
mbstr
Bağımsız değişken iseNULL
, wcsrtombs
hedef dizenin bayt cinsinden gerekli boyutunu döndürür. Null ise mbstate
, iç mbstate_t
dönüştürme durumu kullanılır. Karakter dizisinde wchar
karşılık gelen çok baytlı karakter gösterimi yoksa, -1 döndürülür ve errno
olarak ayarlanır EILSEQ
.
C++'ta, bu işlevin daha yeni, güvenli karşılık gelenini çağıran bir şablon aşırı yüklemesi 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.
Özel durumlar
Bu wcsrtombs
işlev yürütülürken geçerli iş parçacığı çağrılarında setlocale
işlev olmadığı ve mbstate
null olmadığı sürece işlev çok iş parçacıklı güvenlidir.
Örnek
// crt_wcsrtombs.cpp
// compile with: /W3
// 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;
mbstate_t mbstate;
// Reset to initial shift state
::memset((void*)&mbstate, 0, sizeof(mbstate));
countConverted = wcsrtombs(mbString, &wcsIndirectString,
MB_BUFFER_SIZE, &mbstate); // C4996
// Note: wcsrtombs is deprecated; consider using wcsrtombs_s
if (errno == EILSEQ)
{
printf( "An encoding error was detected in the string.\n" );
}
else
{
printf( "The string was successfuly converted.\n" );
}
}
The string was successfuly converted.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
wcsrtombs |
<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