Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      mbsrtowcs, mbsrtowcs_s

      From cppreference.com
      <c‎ |string‎ |multibyte
       
       
       
       
      Defined in header<wchar.h>
      (1)
      size_t mbsrtowcs(wchar_t* dst,constchar** src,size_t len,mbstate_t* ps);
      (since C95)
      (until C99)
      size_t mbsrtowcs(wchar_t*restrict dst,constchar**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,
                           constchar**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. Ifdst is not null, converted characters are stored in the successive elements of the wchar_t array pointed to bydst. No more thanlen wide characters are written to the destination array. Each multibyte character is converted as if by a call tombrtowc. The conversion stops if:
      • The multibyte null character was converted and stored.*src is set to null pointer value and*ps represents the initial shift state.
      • An invalid multibyte character (according to the current C locale) was encountered.*src is set to point at the beginning of the first unconverted multibyte character.
      • the next wide character to be stored would exceedlen.*src is set to point at the beginning of the first unconverted multibyte character. This condition is not checked ifdst is a null pointer.
      2) Same as(1), except that
      • the function returns its result as an out-parameterretval
      • if no null character was written todst afterlen wide characters were written, thenL'\0' is stored indst[len], which means len+1 total wide characters are written
      • the function clobbers the destination array from the terminating null and untildstsz
      • Ifsrc anddst overlap, the behavior is unspecified.
      • the following errors are detected at runtime and call the currently installedconstraint handler function:
      • retval,ps,src, or*src is a null pointer
      • dstsz orlen is greater thanRSIZE_MAX/sizeof(wchar_t) (unlessdst is null)
      • dstsz is not zero (unlessdst is null)
      • There is no null character in the firstdstsz multibyte characters in the*src array andlen is greater thandstsz (unlessdst is null)
      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 constant1 before including<wchar.h>.

      Contents

      [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 thedst 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 terminatingL'\0', written to the character array. Ifdst 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, storesEILSEQ inerrno, 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 todst, is stored in*retval), non-sero on error. In case of a runtime constraint violation, stores(size_t)-1 in*retval (unlessretval is null) and setsdst[0] toL'\0' (unlessdst is null ordstmax is zero or greater thanRSIZE_MAX)

      [edit]Example

      Run this code
      #include <stdio.h>#include <locale.h>#include <wchar.h>#include <string.h> void print_as_wide(constchar* 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

      • C11 standard (ISO/IEC 9899:2011):
      • 7.29.6.4.1 The mbsrtowcs function (p: 445)
      • K.3.9.3.2.1 The mbsrtowcs_s function (p: 648-649)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.24.6.4.1 The mbsrtowcs function (p: 391)

      [edit]See also

      converts a narrow multibyte character string to wide string
      (function)[edit]
      (C95)
      converts the next multibyte character to wide character, given state
      (function)[edit]
      converts a wide string to narrow multibyte character string, given state
      (function)[edit]
      C++ documentation formbsrtowcs
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/string/multibyte/mbsrtowcs&oldid=119770"

      [8]ページ先頭

      ©2009-2025 Movatter.jp