mbrlen
Determine o número de bytes em uma seqüência de caracteres, com a capacidade de reinicialização no meio de um caracteres multibyte, se necessário, enquanto estiver usando a localidade atual.
size_t mbrlen(
const char *str,
size_t maxSize,
mbstate_t mbstate
);
Parâmetros
str
Seqüência terminada por caractere nulo.maxSize
O tamanho máximo da seqüência de caracteres, excluindo o caractere nulo de terminação.mbstate
O estado de shift de conversão.
Valor de retorno
Se a seqüência for menor do que maxSize caracteres de comprimento, cada uma dessas funções retorna o número de caracteres em str, excluindo o terminal NULL.Se a seqüência de caracteres é maior do que maxSize caracteres de comprimento, em seguida, maxSize é retornado.
0
Se a contagem do próxima ou menos bytes conclua os caracteres multibyte que representa o NULL caracteres largos.> 0
Se a contagem do próxima ou menos bytes concluir um caractere multibyte válido, o valor retornado é o número de bytes que completam a caracteres multibyte.-1
Se os bytes de contagem próximo contribuem para um multibyte incompleto e todos os bytes de contagem foram processados.-2
Se ocorrer um erro de codificação, caso em que a próxima contagem ou menos bytes não contribuem para os caracteres multibyte completo e válido, o valor de errno valor será EILSEQ e o estado de conversão ambíguo.
Comentários
O mbrlen função determina o número de bytes que constitui a seqüência de caracteres multibyte de str, com a capacidade de reinicialização no meio de um caractere de vários bytes, se precisar ser, examinando no máximo maxSize bytes.O mbstate_t argumento mbstate é usado para controlar o estado de shift.Se for NULL, mbrlen usa um estático interno, mbstate_t objeto.É equivalente a:
mbrtowc(NULL, str, maxSize, mbstate)
Exceto quando o caso de mbstate é NULL, mbrlen depende de seu próprio estática, interna mbstate_t o objeto para controlar o estado de shift.
O mbrlen função difere _mbclen, mblen, _mblen_l por sua capacidade de reinicialização.O estado de conversão é armazenado em mbstate para chamadas subseqüentes para o mesmo ou outras funções reinicializáveis.Os resultados são indefinidos ao combinar o uso de funções reiniciáveis e não reiniciável.Por exemplo, um aplicativo deve usar wcsrlen em vez de wcslen, se uma chamada subseqüente para wcsrtombs onde usado em vez dewcstombs.
Mapeamentos de rotina de texto genérico
TCHAR.Rotina H |
_ Unicode & _ MBCS do arquivo não definido |
_ MBCS do arquivo definido |
_ Unicode definido |
---|---|---|---|
n/a |
n/a |
mbrlen |
n/a |
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
mbrlen |
<wchar.h> |
Para obter informações adicionais de compatibilidade, consulte compatibilidade na introdução.
Exemplo
// crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
size_t Example(const char * pStr)
{
size_t charLen = 0;
size_t charCount = 0;
mbstate_t mbState;
memset(&mbState, 0, sizeof(mbState));
while ((charLen = mbrlen(pStr, MB_CUR_MAX, &mbState)) != 0 &&
charLen != (size_t)-1 && charLen != (size_t)-2)
{
pStr += charLen;
charCount++;
}
return (charCount);
}
int main( void )
{
size_t charCount = 0;
const char *pSample = "Every good boy does fine.";
charCount = Example(pSample);
printf("%s\nLength: %d\n", pSample, charCount);
}