The mbsrtowcs() function in C/C++ converts a narrow multibyte character sequence to a wide character sequence. It converts the multibyte character string whose first byte is represented by *src to corresponding wide character representation and is stored in the wide character array pointed to by dest. A maximum of len wide characters are written to dest.
Syntax :
size_t mbsrtowcs( wchar_t* dest, const char** src, size_t len, mbstate_t* ps )
Parameters: The function accepts four mandatory parameters which are described below:
- dest :specifies the pointer to the array where the converted wide character is stored
- ps :specifies the pointer to the conversion state object
- src :specifies the pointer to pointer to the first multibyte character to convert
- len :specifies the maximum number wide character to store
Return value : The function returns two value as below:
- the mbsrtowcs() function returns the number of wide characters written to dest excluding the terminating wide null character on success.
- if dest is a null pointer, it returns the number of wide characters that would have been written considering unlimited length.
- on conversion error, -1 is returned and errno is set to EILSEQ
.
Note : This function moves the src pointer to the end of the converted multibyte string. This doesn’t happen if dst==NULL
Below programs illustrate the above function :
Program 1 :
// C++ program to illustrate // mbsrtowcs function #include <bits/stdc++.h> using namespace std;
int main()
{ setlocale (LC_ALL, "en_US.utf8" );
// initializing the string
// narrow multibyte character sequence
const char * src = "\u0763\u0757" ;
wchar_t dest[20];
// initial state
mbstate_t ps = mbstate_t ();
// maximum number of wide character
int max = 10;
int retVal = mbsrtowcs ( dest, &src, max, &ps );
wcout << L "Number of wide characters written = "
<< retVal << endl;
wcout << L "Wide character = " << dest << endl;
return 0;
} |
Number of wide characters written = 2 Wide character = Ý£Ý?
Program 2 :
// C++ program to illustrate // mbsrtowcs function #include <bits/stdc++.h> using namespace std;
int main()
{ // set locale
setlocale (LC_ALL, "en_US.utf8" );
// initializing the string
// narrow multibyte character sequence
const char * src = u8 "z\u00df\u6c34\U0001f34c" ;
wchar_t dest[20];
// initial state
mbstate_t ps = mbstate_t ();
// maximum number of wide character
int max = 10;
int retVal = mbsrtowcs ( dest, &src, max, &ps );
wcout << L "Number of wide characters written = "
<< retVal << endl;
wcout << L "Wide character = " << dest << endl;
return 0;
} |
Number of wide characters written = 4 Wide character = zÃ?æ°´ð??