Sdílet prostřednictvím


mbrlen

Určete počet bajtů potřebných k dokončení vícebajtového znaku v aktuálním národním prostředí s možností restartování uprostřed vícebajtového znaku.

Syntaxe

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

Parametry

str
Ukazatel na další bajt, který chcete zkontrolovat v řetězci vícebajtového znaku.

count
Maximální počet bajtů, které chcete zkontrolovat.

mbstate
Ukazatel na aktuální stav posunu počátečního bajtu str.

Vrácená hodnota

Jedna z následujících hodnot:

Hodnota popis
0 Další count nebo méně bajtů dokončí vícebajtový znak, který představuje široký znak null.
1 až count, včetně Další count nebo méně bajtů dokončí platný vícebajtový znak. Vrácená hodnota je počet bajtů, které dokončí vícebajtový znak.
(size_t) (-2) Další count bajty přispívají k neúplné, ale potenciálně platné vícebajtové znaky a všechny count bajty byly zpracovány.
(size_t) (-1) Došlo k chybě kódování. Další count nebo méně bajtů nepřispívá k úplnému a platnému vícebajtovém znaku. V tomto případě errno je nastavená hodnota EILSEQ a stav převodu není mbstate zadaný.

Poznámky

Funkce mbrlen kontroluje maximálně count bajty začínající bajty, na které str odkazuje, a určí počet bajtů, které jsou nutné k dokončení dalšího vícebajtového znaku, včetně všech posloupností posunu. Je to ekvivalent volání mbrtowc(NULL, str, count, &mbstate) , kde mbstate je buď objekt poskytovaný mbstate_t uživatelem, nebo statický interní objekt poskytovaný knihovnou.

Funkce mbrlen uloží a použije stav posunu neúplného vícebajtového znaku v parametru mbstate . Proto se **mbrlen*může restartovat uprostřed vícebajtového znaku, pokud je to potřeba, a prozkoumat maximálně count bajty. Pokud mbstate je ukazatel null, mbrlen používá interní statický mbstate_t objekt k uložení stavu směny. Protože interní mbstate_t objekt není bezpečný pro přístup z více vláken, doporučujeme vždy přidělit a předat vlastní mbstate parametr.

Funkce mbrlen se liší od _mbclen, mblen_mblen_l podle jeho restartability. Stav směny se uloží mbstate pro následná volání stejných nebo jiných restartovatelných funkcí. Výsledky nejsou definovány při kombinování použití restartovatelných a nerestartovatelných funkcí. Například aplikace by měla místo toho, wcsrlenwcslen pokud se místo následného volání wcsrtombs použije wcstombs.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
nejde použít nejde použít mbrlen nejde použít

Požadavky

Rutina Požadovaný hlavičkový soubor
mbrlen <wchar.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

Tento příklad ukazuje, jak interpretace vícebajtových znaků závisí na aktuální znakové stránce a ukazuje schopnost mbrlenobnovení .

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

Viz také

Manipulace s řetězci
Národní prostředí