mbrtowc, mbrtoc16,
mbrtoc32 — convert a
character to a wide-character code (restartable)
Standard C Library (libc, -lc)
#include
<wchar.h>
size_t
mbrtowc(wchar_t * restrict pc,
const char * restrict s, size_t
n, mbstate_t * restrict ps);
#include
<uchar.h>
size_t
mbrtoc16(char16_t * restrict pc,
const char * restrict s, size_t
n, mbstate_t * restrict ps);
size_t
mbrtoc32(char32_t * restrict pc,
const char * restrict s, size_t
n, mbstate_t * restrict ps);
The
mbrtowc(),
mbrtoc16() and
mbrtoc32()
functions inspect at most n bytes pointed to by
s to determine the number of bytes needed to complete
the next multibyte character. If a character can be completed, and
pc is not NULL, the wide
character which is represented by s is stored in the
wchar_t, char16_t or
char32_t it points to.
If s is NULL, these
functions behave as if pc was
NULL, s was an empty string
("") and n was 1.
The mbstate_t argument,
ps, is used to keep track of the shift state. If it is
NULL, these functions use an internal, static
mbstate_t object, which is initialized to the initial
conversion state at program startup.
As a single char16_t is not
large enough to represent certain multibyte characters, the
mbrtoc16()
function may need to be invoked multiple times to convert a single multibyte
character sequence.
The mbrtowc(),
mbrtoc16() and mbrtoc32()
functions return:
- 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, these functions return the number of bytes used to complete the
multibyte character.
- (size_t)-1
- An encoding error has occurred. The next n or fewer
bytes do not contribute to a valid 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.
The mbrtoc16() function also returns:
- (size_t)-3
- The next character resulting from a previous call has been stored. No
bytes from the input have been consumed.
The mbrtowc(),
mbrtoc16() and mbrtoc32()
functions will fail if:
- [
EILSEQ]
- An invalid multibyte sequence was detected.
- [
EINVAL]
- The conversion state is invalid.
The mbrtowc(),
mbrtoc16() and mbrtoc32()
functions conform to ISO/IEC 9899:2011
(“ISO C11”).