Name

mbrlen - determines number of bytes in next multibyte character

Library

libc.lib

Synopsis

  #include <wchar.h>
  size_t mbrlen (const char * restrict s, size_t n, mbstate_t * restrict ps);

Return values

The mbrlen functions returns:
0 The next n or fewer bytes represent the null wide character (L’\0’).
>0 The next n or fewer bytes represent a valid character, mbrlen returns the number of bytes used to complete the multibyte character.
(size_t-2)
  The next n contribute to, but do not complete, a valid multibyte character sequence, and all n bytes have been processed.
(size_t-1)
  An encoding error has occurred. The next n or fewer bytes do not contribute to a valid multibyte character.

Detailed description

The mbrlen function inspects at most n bytes pointed to by s to determine the number of bytes needed to complete the next multibyte character.

The mbstate_t argument, ps, is used to keep track of the shift state. If it is NULL, mbrlen uses an internal, static mbstate_t object, which is initialized to the initial conversion state at program startup.

It is equivalent to:

     mbrtowc(NULL, s, n, ps);
Except that when ps is a NULL pointer, mbrlen uses its own static, internal mbstate_t object to keep track of the shift state. The behavior of the mbrlen is affected by LC_CTYPE category of the current locale.

Examples

A function that calculates the number of characters in a multibyte character string:
size_t
nchars(const char *s)
{
        size_t charlen, chars;
        mbstate_t mbs;
        chars = 0;
        memset(&mbs, 0, sizeof(mbs));
        while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 &&
            charlen != (size_t)-1 && charlen != (size_t)-2) {
                s += charlen;
                chars++;
        }
        return (chars);
}

         


Errors

The mbrlen function will fail if:
[EILSEQ]
  An invalid multibyte sequence was detected.
[EINVAL]
  The conversion state is invalid.

Limitations

The current implementation of mbrlen is not affected by the LC_CTYPE category of the current locale. It works only for UTF8 character set.

See also

mblen, mbrtowc

Feedback

For additional information or queries on this page send feedback

© 2005-2007 Nokia

Top