📜  C / C++中的mbsrtowcs()函数

📅  最后修改于: 2021-05-25 21:23:50             🧑  作者: Mango

C / C++中的mbsrtowcs( )函数将一个窄的多字节字符序列转换为一个宽的字符序列。其转换的多字符字符串,其第一个字节是由*所表示的src对应宽字符表示,并且被存储在宽字符阵列中dest指向到。最多可将len个宽字符写入dest

句法 :

size_t mbsrtowcs( wchar_t* dest, const char** src, size_t len, mbstate_t* ps )

参数:该函数接受四个强制性参数,如下所述:

  • dest:指定指向存储转换后的宽字符的数组的指针
  • ps:指定指向转换状态对象的指针
  • src:指定指向第一个要转换的多字节字符的指针
  • len:指定要存储的最大宽度字符

返回值:函数返回两个值,如下所示:

  • mbsrtowcs()函数返回成功写入dest的宽字符数,但不包括终止的空null字符。
  • 如果dest是空指针,则返回考虑到无限长度的宽字符数。
  • 发生转换错误时,返回-1并将errno设置为EILSEQ

注意:此函数将src指针移至转换后的多字节字符串。如果dst == NULL则不会发生

下面的程序说明了上述函数:
程序1:

// C++ program to illustrate 
// mbsrtowcs function
#include 
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 = Ý£Ý?

程序2:

// C++ program to illustrate 
// mbsrtowcs function
#include 
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Ã?æ°´ð??
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”