size_t
mbsrtowcs(
wchar_t * restrict pwcs
, const char ** restrict s
, size_t n
, mbstate_t * restrict ps
)
)
converts the multibyte character string indirectly pointed to by
s
to the corresponding wide character string, and stores it in the
array pointed to by
pwcs
.
The conversion stops due to the following reasons:
)
has already stored
n
wide characters.
Each character will be converted as if mbrtowc(3) is continuously called.
After conversion,
if
pwcs
is not a null pointer,
the pointer object pointed to by
s
is a null pointer (if the conversion is stopped due to reaching a
nul byte) or the first byte of the character just after the last
character converted.
If
pwcs
is not a null pointer and the conversion is stopped due to reaching
a nul byte, the
mbsrtowcs()
places the state object pointed to by
ps
to an initial state after the conversion has taken place.
The behaviour of
mbsrtowcs()
is affected by the
LC_CTYPE
category of the current locale.
These are the special cases:
s
is not modified and
n
is ignored.
)
uses its own internal state object to keep the conversion state,
instead of
ps
mentioned in this manual page.
Calling any other functions in
Standard C Library (libc, -lc)
never changes the internal state of
mbsrtowcs(),
which is initialized at startup time of the program.
)
returns:
pwcs
,
except for a terminating nul wide character (if any).
If
pwcs
is not
NULL
and the value returned is equal to
n
,
the wide character string pointed to by
pwcs
is not nul-terminated.
If
pwcs
is a null pointer, the value returned is the number of elements to contain
the whole string converted, except for a terminating nul wide character.
s
contains a byte sequence forming invalid character.
In this case,
mbsrtowcs(
)
sets
errno
to indicate the error.
)
may cause an error in the following case:
EILSEQ
]
s
points to an invalid or incomplete multibyte character.
EINVAL
]
ps
points to an invalid or uninitialized mbstate_t object.
)
function conforms to
ISO/IEC 9899/AMD1:1990 (``ISO C90'') .
The restrict qualifier is added at
ISO/IEC 9899:1999 (``ISO C99'') .