WCSRTOMBS(3) BSD Programmer's Manual WCSRTOMBS(3)
wcsrtombs, wcsnrtombs - convert a wide character string to a multibyte character
#include <stdlib.h> size_t wcsrtombs(char *s, const wchar_t **pwcs, size_t n, mbstate_t *ps); size_t wcsnrtombs(char *s, const wchar_t **pwcs, size_t max, size_t n, mbstate_t *ps);
wcsrtombs() converts the null-terminated wide character string indirectly pointed to by pwcs to the corresponding multibyte character string, and store it to the array pointed to by s. The wcsnrtombs() function behaves the same, but reads at most max wide characters from the wide character string indirectly pointed to by pwcs. The conversion stops due to the following reasons: • The conversion reaches a null wide character. In this case, the null wide character is also converted. • wcsrtombs() or wcsnrtombs() has already stored n bytes to the array pointed to by s. • The conversion encounters an invalid character. • The wcsnrtombs() function has already devoured max wide characters. Each characters will be converted as if wcrtomb(3) is continuously called, except the internal state of wcrtomb(3) will not be affected. After conversion, if s is not a NULL pointer, the pointer object pointed to by pwcs is a NULL pointer (if the conversion is stopped due to reach- ing a null wide character) or the first byte of the character just after the last character converted. If s is not a null pointer and the conversion is stopped due to reaching a null wide character, wcsrtombs() and wcsnrtombs() place the state ob- ject pointed to by ps to an initial state after the conversion is taken place. The behaviour of the wcsrtombs() and wcsnrtombs() is affected by the LC_CTYPE category of the current locale. These are the special cases: s == NULL wcsrtombs() and wcsnrtombs() return the number of bytes to store the whole multibyte character string corresponding to the wide character string pointed to by pwcs, not including the terminating null byte. In this case, n is ignored. pwcs == NULL || *pwcs == NULL Undefined (may causes the program to crash). ps == NULL wcsrtombs() uses its own internal state object to keep the conversion state, instead of ps mentioned in this manual page. wcsnrtombs() has an own internal state which is dif- ferent from the one of wcsrtombs(). Calling any other functions in libc never change the inter- nal state of wcsnrtombs() or wcsrtombs(), that is initial- ised at startup time of the program.
wcsrtombs() and wcsnrtombs() return: 0 or positive Number of bytes stored to the array pointed to by s, except for a null byte. There is no cases that the value returned is greater than n (unless s is a null pointer). If the re- turn value is equal to n, the string pointed to by s will not be null-terminated. (size_t)-1 pwcs points to the string containing invalid wide charac- ter. wcsrtombs() and wcsnrtombs() also set errno to indi- cate the error.
wcsrtombs() and wcsnrtombs() may cause an error in the following cases: [EILSEQ] pwcs points to the string containing an invalid wide char- acter.
setlocale(3), wcrtomb(3), wcstombs(3)
The wcsrtombs() function conforms to ANSI X3.159-1989 ("ANSI C89"). The wcsnrtombs() function is a GNU extension.
wcsnrtombs() first appeared in MirBSD #10. MirBSD #10-current December 11, 2021 1