Open In App

mbsrtowcs() function in C/C++

Last Updated : 11 Sep, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

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;


Output:

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


Output:

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


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads