size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps);
The function determines the number of bytes needed to represent the wide character wc as a multibyte character, if
possible. (Not all values representable as type wchar_t are necessarily valid wide-character codes.)
If ps is not a null pointer, the conversion state for the multibyte string is assumed to be *ps. Otherwise, it is assumed to
be &internal, where internal is an object of type mbstate_t internal to the wcrtomb function. At program
startup, internal is initialized to the initial conversion state. No other library function alters the value stored in
internal.
If s is not a null pointer and wc is a valid wide-character code, the function determines x, the number of bytes needed
to represent wc as a multibyte character, and stores the converted bytes in the array of char beginning at s. (x cannot
be greater than MB_CUR_MAX.) If wc is a null wide character, the function stores any shift sequence needed to restore
the initial shift state, followed by a null byte. The resulting conversion state is the initial conversion state.
If s is a null pointer, the function effectively returns wcrtomb(buf, L'\0', ps), where buf is a buffer internal to the
function. (The function thus returns the number of bytes needed to restore the initial conversion state and to terminate
the multibyte string pending from a previous call to wcrtomb or wcsrtombs for the same string and conversion state.)
The function returns:
(size_t)-1 if wc is an invalid wide-character code, in which case the function stores the value EILSEQ in
errno and leaves the resulting conversion state undefined. x, the number of bytes needed to complete the next muitibyte character, in which case the resulting conversion state indicates that x bytes have been generated.