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. 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 mbstatedolaylı değerlerden geniş karakterlerden oluşan bir dizeyi wcstradresine mbstrdö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 countyer 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_lwcstombs 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 wcstombskullanı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