mbsrtowcs() function in C/C++

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 :

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;

chevron_right


Output:

Number of wide characters written = 2
Wide character = Ý£Ý?

Program 2 :

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Output:

Number of wide characters written  = 4
Wide character = zÃ?æ°´ð??


My Personal Notes arrow_drop_up

Recommended Posts:



    Article Tags :
    Practice Tags :


    Be the First to upvote.


    Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.