mbrlen
Zjistěte počet bajtů, které jsou nezbytné pro dokončení více znak v aktuální národní prostředí s možností restartování uprostřed více znaků.
size_t mbrlen( const char * str, size_t count, mbstate_t * mbstate );
Parametry
str
Ukazatel na další bajtu, chcete-li prověřit v řetězec více znaků.count
Maximální počet bajtů, které mají zkontrolovat.mbstate
Ukazatel na aktuální stav shift počáteční bajtu str.
Vrácená hodnota
Jeden z následujících hodnot:
0
Další count nebo méně bajtů dokončit více znak, který představuje široký znak null.1 count, včetně
Další count nebo méně bajtů dokončení platný více znak.Hodnota vrácená je počet bajtů, které dokončit více znaků.(size_t)-(2)
Další count bajtů přispívají k nekompletní, ale potenciálně platný více znaků a všechny count byly zpracovány bajtů.(size_t)(-1)
Došlo k chybě kódování.Další count nebo méně bajtů není k němu přispět úplnou a platnou více znaků.V takovém případě errno je nastavena na EILSEQ a se stavem převodu v mbstate neurčená.
Poznámky
mbrlen Funkce zkontroluje, zda obsahuje maximálně count bajtů počínaje bajtu na kterou odkazuje str určit počet bajtů, které jsou vyžadovány k dokončení více další znak, včetně všech sekvencí shift.Je ekvivalentní volání funkce mbrtowc(NULL, str, count, &mbstate) kde mbstate je buď zadaný uživatelem mbstate_t , nebo statické vnitřní objekt poskytované knihovny.
mbrlen Funkce uloží a použije stav shift nekompletní vícebajtový v mbstate parametru.Díky tomu mbrlen schopnost restartování uprostřed více znaků, pokud je třeba, zkoušení maximálně count bajtů.Pokud mbstate je ukazatel s hodnotou null, mbrlen používá interní, statické mbstate_t objekt pro uložení stavu shift.Protože interní mbstate_t objekt není vláken, doporučujeme, abyste vždy přidělit a předat své vlastní mbstate parametru.
mbrlen Funkce se liší od _mbclen, mblen, _mblen_l podle jeho restartability.Stav shift je uložen v mbstate pro následné volání stejné nebo jiné funkce s možností restartování.Výsledky nedefinované při použití s možností restartování a nonrestartable funkcí.Například by měla použít aplikace wcsrlen namísto wcslen -li následných volání wcsrtombs se používá místowcstombs.
Mapování rutin obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definována. |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
není k dispozici |
není k dispozici |
mbrlen |
není k dispozici |
Požadavky
Rutina |
Požadovaný hlavičkový soubor |
---|---|
mbrlen |
< wchar.h > |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
Tento příklad ukazuje, jak výklad středník závisí na aktuální stránce kódu a ukazuje obnovením schopnost mbrlen.
// 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);
}