Aracılığıyla paylaş


mbrlen

Çok baytlı bir karakterin ortasında yeniden başlatma özelliğiyle, geçerli yerel ayarda çok baytlı bir karakteri tamamlamak için gereken bayt sayısını belirleyin.

Sözdizimi

size_t mbrlen(
   const char * str,
   size_t count,
   mbstate_t * mbstate
);

Parametreler

str
Çok baytlı bir karakter dizesinde incelemek için sonraki bayt işaretçisi.

count
denetlenecek en fazla bayt sayısı.

mbstate
başlangıç baytının geçerli kaydırma durumunun işaretçisi str.

Dönüş değeri

Aşağıdaki değerlerden biri:

Değer Tanım
0 Sonraki count veya daha az bayt, geniş null karakteri temsil eden çok baytlı karakteri tamamlar.
1 - count, dahil Sonraki count veya daha az bayt geçerli bir çok baytlı karakteri tamamlar. Döndürülen değer, çok baytlı karakteri tamamlayan bayt sayısıdır.
(size_t) (-2) Sonraki count baytlar eksik ancak geçerli olabilecek çok baytlı bir karaktere katkıda bulunur ve tüm count baytlar işlenmiştir.
(size_t) (-1) Kodlama hatası oluştu. Sonraki count veya daha az bayt, tam ve geçerli bir çok baytlı karaktere katkıda bulunmaz. Bu durumda, errno EILSEQ olarak ayarlanır ve içindeki mbstate dönüştürme durumu belirtilmez.

Açıklamalar

İşlev, mbrlen üst karakter dizileri de dahil olmak üzere sonraki çok baytlı karakteri tamamlamak için gereken bayt sayısını belirlemek için bayt işaretiyle str başlayarak en count fazla bayt sayısını inceler. Bu, kullanıcı tarafından sağlanan mbstate_t bir nesne veya kitaplık tarafından sağlanan statik bir iç nesne olan mbstate çağrıya mbrtowc(NULL, str, count, &mbstate) eşdeğerdir.

İşlev, mbrlen parametresindeki tamamlanmamış çok baytlı bir karakteri mbstate kaydeder ve kaydırma durumunu kullanır. Bu nedenle **mbrlen**, gerekirse çok baytlı bir karakterin ortasında yeniden başlatılabilir ve en fazla count bayt değerini inceleyebilir. Null işaretçiyse mbstate , mbrlen vardiya durumunu depolamak için iç, statik mbstate_t bir nesne kullanır. İç mbstate_t nesne iş parçacığı açısından güvenli olmadığından her zaman kendi mbstate parametrenizi ayırmanızı ve geçirmenizi öneririz.

İşlev, mbrlen yeniden başlatılabilirliğine göre , mblenişlevinden _mblen_l_mbclen farklıdır. Vardiya 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, bir uygulama yerine wcslen sonraki bir çağrısı wcsrtombs kullanılıyorsa wcstombsyerine kullanmalıdırwcsrlen.

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.

Genel metin yordamı eşlemeleri

TCHAR.H yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
geçerli değil geçerli değil mbrlen geçerli değil

Gereksinimler

Yordam Gerekli başlık
mbrlen <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

Bu örnek, çok baytlı karakterlerin yorumlanmasının geçerli kod sayfasına nasıl bağlı olduğunu gösterir ve öğesinin devam etme özelliğini mbrlengösterir.

// crt_mbrlen.c
// Compile by using: cl crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>

size_t Example(const char * pStr)
{
    size_t      charLen = 0;
    size_t      charCount = 0;
    mbstate_t   mbState = {0};

    while ((charLen = mbrlen(pStr++, 1, &mbState)) != 0 &&
            charLen != (size_t)-1)
    {
        if (charLen != (size_t)-2) // if complete mbcs char,
        {
            charCount++;
        }
    }
    return (charCount);
}

int main( void )
{
    int         cp;
    size_t      charCount = 0;
    const char  *pSample =
        "\x82\xD0\x82\xE7\x82\xAA\x82\xC8: Shift-jis hiragana.";

    cp = _getmbcp();
    charCount = Example(pSample);
    printf("\nCode page: %d\n%s\nCharacter count: %d\n",
        cp, pSample, charCount);

    setlocale(LC_ALL, "ja-JP"); // Set Japanese locale
    _setmbcp(932); // and Japanese multibyte code page
    cp = _getmbcp();
    charCount = Example(pSample);
    printf("\nCode page: %d\n%s\nCharacter count: %d\n",
        cp, pSample, charCount);
}

Code page: 0
é╨éτé¬é╚: Shift-jis hiragana.
Character count: 29

Code page: 932
????: Shift-jis hiragana.
Character count: 25

Ayrıca bkz.

Dize işleme
Yerel ayar