A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/algorithm/../../cpp/../cpp/../c/string/multibyte/mbsrtowcs.html below:

mbsrtowcs, mbsrtowcs_s - cppreference.com

(1) (since C95)
(until C99) size_t mbsrtowcs( wchar_t *restrict dst, const char **restrict src, size_t len,
                  mbstate_t *restrict ps );
(since C99) errno_t mbsrtowcs_s( size_t *restrict retval,

                     wchar_t *restrict dst, rsize_t dstsz,
                     const char **restrict src, rsize_t len,

                     mbstate_t *restrict ps );
(2) (since C11) 1)

Converts a null-terminated multibyte character sequence, which begins in the conversion state described by

*ps

, from the array whose first element is pointed to by

*src

to its wide character representation. If

dst

is not null, converted characters are stored in the successive elements of the wchar_t array pointed to by

dst

. No more than

len

wide characters are written to the destination array. Each multibyte character is converted as if by a call to

mbrtowc

. The conversion stops if:

2)

Same as

(1)

, except that

As with all bounds-checked functions, mbsrtowcs_s is only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including <wchar.h>.
[edit] Parameters dst - pointer to wide character array where the results will be stored src - pointer to pointer to the first element of a null-terminated multibyte string len - number of wide characters available in the array pointed to by dst ps - pointer to the conversion state object dstsz - max number of wide characters that will be written (size of the dst array) retval - pointer to a size_t object where the result will be stored [edit] Return value 1)

On success, returns the number of wide characters, excluding the terminating

L'\0'

, written to the character array. If

dst

is a null pointer, returns the number of wide characters that would have been written given unlimited length. On conversion error (if invalid multibyte character was encountered), returns

(size_t)-1

, stores

EILSEQ

in

errno

, and leaves

*ps

in unspecified state.

2)

zero on success (in which case the number of wide characters excluding terminating zero that were, or would be written to

dst

, is stored in

*retval

), non-sero on error. In case of a runtime constraint violation, stores

(size_t)-1

in

*retval

(unless

retval

is null) and sets

dst[0]

to

L'\0'

(unless

dst

is null or

dstmax

is zero or greater than

RSIZE_MAX

)

[edit] Example
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <string.h>
 
void print_as_wide(const char* mbstr)
{
    mbstate_t state;
    memset(&state, 0, sizeof state);
    size_t len = 1 + mbsrtowcs(NULL, &mbstr, 0, &state);
    wchar_t wstr[len];
    mbsrtowcs(&wstr[0], &mbstr, len, &state);
    wprintf(L"Wide string: %ls \n", wstr);
    wprintf(L"The length, including L'\\0': %zu\n", len);
}
 
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    print_as_wide(u8"z\u00df\u6c34\U0001f34c"); // u8"zß水🍌"
}

Output:

Wide string: zß水🍌
The length, including L'\0': 5
[edit] References
[edit] See also

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4