Aracılığıyla paylaş


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 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