mblen, mbstowcs, mbtowc, wcstombs, wctomb -- multibyte character support
Standard C Library (libc, -lc)
mblen(const char *mbchar, size_t nbytes);
mbstowcs(wchar_t * restrict wcstring, const char * restrict mbstring,
mbtowc(wchar_t * restrict wcharp, const char * restrict mbchar,
wcstombs(char * restrict mbstring, const wchar_t * restrict wcstring,
wctomb(char *mbchar, wchar_t wchar);
The basic elements of some written natural languages such as Chinese cannot
be represented uniquely with single C chars. The C standard supports
two different ways of dealing with extended natural language encodings,
wide characters and multibyte characters. Wide characters are an internal
representation which allows each basic element to map to a single
object of type wchar_t. Multibyte characters are used for input and output
and code each basic element as a sequence of C chars. Individual
basic elements may map into one or more (up to MB_LEN_MAX) bytes in a
The current locale (setlocale(3)) governs the interpretation of wide and
multibyte characters. The locale category LC_CTYPE specifically controls
this interpretation. The wchar_t type is wide enough to hold the largest
value in the wide character representations for all locales.
Multibyte strings may contain `shift' indicators to switch to and from
particular modes within the given representation. If explicit bytes are
used to signal shifting, these are not recognized as separate characters
but are lumped with a neighboring character. There is always a distinguished
`initial' shift state. The mbstowcs() and wcstombs() functions
assume that multibyte strings are interpreted starting from the initial
shift state. The mblen(), mbtowc() and wctomb() functions maintain
static shift state internally. A call with a null mbchar pointer returns
nonzero if the current locale requires shift states, zero otherwise; if
shift states are required, the shift state is reset to the initial state.
The internal shift states are undefined after a call to setlocale() with
the LC_CTYPE or LC_ALL categories.
For convenience in processing, the wide character with value 0 (the null
wide character) is recognized as the wide character string terminator,
and the character with value 0 (the null byte) is recognized as the
multibyte character string terminator. Null bytes are not permitted
within multibyte characters.
The mblen() function computes the length in bytes of a multibyte character
mbchar. Up to nbytes bytes are examined.
The mbtowc() function converts a multibyte character mbchar into a wide
character and stores the result in the object pointed to by wcharp. Up
to nbytes bytes are examined.
The wctomb() function converts a wide character wchar into a multibyte
character and stores the result in mbchar. The object pointed to by
mbchar must be large enough to accommodate the multibyte character.
The mbstowcs() function converts a multibyte character string mbstring
into a wide character string wcstring. No more than nwchars wide characters
are stored. A terminating null wide character is appended if there
The wcstombs() function converts a wide character string wcstring into a
multibyte character string mbstring. Up to nbytes bytes are stored in
mbstring. Partial multibyte characters at the end of the string are not
stored. The multibyte character string is null terminated if there is
If mbchar is NULL, the mblen(), mbtowc() and wctomb() functions return
nonzero if shift states are supported, zero otherwise. If mbchar is
valid, then these functions return the number of bytes processed in
mbchar, or -1 if no multibyte character could be recognized or converted.
The mbstowcs() function returns the number of wide characters converted,
not counting any terminating null wide character. The wcstombs() function
returns the number of bytes converted, not counting any terminating
null byte. If any invalid multibyte characters are encountered, both
functions return -1.
btowc(3), mbrlen(3), mbrtowc(3), mbrune(3), mbsinit(3), mbsrtowcs(3),
rune(3), setlocale(3), wcrtomb(3), wcsrtombs(3), big5(5), euc(5),
gb18030(5), gb2312(5), gbk(5), mskanji(5), utf2(5), utf8(5)
The mblen(), mbstowcs(), mbtowc(), wcstombs() and wctomb() functions conform
to ISO/IEC 9899:1990 (``ISO C89'').
The current implementation does not support shift states.
FreeBSD 5.2.1 August 10, 2003 FreeBSD 5.2.1 [ Back ]