Name
mbrlen - determines number of bytes in next multibyte character
Library
libc.lib
Synopsis
|
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
|
|