Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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, wcsrlen wcslen 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 definovaný |
_UNICODE definovaný |
|---|---|---|---|
| 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