当前位置: C语言 -- 标准库 -- <stdlib.h> -- mbstowcs

mbstowcs函数


概要:
#include <stdlib.h>
size_t mbstowcs(wchar_t * restrict pwcs,
      const char * restrict s,
      size_t n);

描述:

该函数将多字节字符序列转换为宽字符序列。

该函数从参数s指向数组中将以初始移位状态开始的多字节字符序列转换为对应的宽字符序列,并将最多n个宽字符存入参数pwcs指向的数组中。空字符会被转换成空宽字符;空字符后的多字节字符不会被转换。除了mbtowc函数的转换状态不受影响,每个多字节字符的转换就像调用mbtowc函数一样。参数pwcs指向的数组中最多n个元素会被修改。


如果复制发生在重叠对象之间,函数行为是未定义的。

mbstowcs函数会受当前语言环境LC_CTYPE类别的影响。

ISO/IEC 9899:2018标准定义了该函数的安全版本mbstowcs_s


参数:
wchar_t * restrict pwcs

指向wchar_t类型数组的指针,转换得到的宽字符将存储在该数组中。

const char * restrict s

指向存储多字节字符序列数组的指针。

size_t n

指定最多可以存储的宽字符数。


返回值:

如果遇到无效的多字节字符,函数返回(size_t)(-1);如果未遇到无效的多字节字符,函数返回存入数组的宽字符数,不包括终止空宽字符(如果存在终止空宽字符。)。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
/*函数mbstowcs范例*/

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

#define LENGTH 4

int main(void)
{
    setlocale(LC_ALL, "");
    
    size_t i = 0;
    const char arr[] = "端午节";
    size_t number;              //存储转换得到的宽字符数。
    wchar_t wStr[LENGTH];       //存储转换得到的宽字符。
    
    /*多字节字符序列转换成宽字符序列前。*/
    printf("多字节字符序列(不包括终止空字符)");
    printf("转换前占有%zu个字节,", sizeof(arr)/sizeof(arr[0])-1);
    printf("各个字节的值分别是:\n");
    while(arr[i] != 0)
    {
        printf("%0X ", (unsigned char)arr[i++]);
    }
    puts("");
    
    /*多字节字符序列转换成宽字符序列。*/
    number = mbstowcs(wStr, arr, LENGTH);
    
    /*多字节字符序列转换成宽字符序列后。*/
    printf("转换后得到%zu个宽字符,各个宽字符的值分别是:\n", number);
    for(i=0; i<number; ++i)
    {
        printf("%X ", wStr[i]);
    }

    return 0;
}


输出:

多字节字符序列(不包括终止空字符)转换前占有9个字节,各个字节的值分别是:

E7 AB AF E5 8D 88 E8 8A 82

转换后得到3个宽字符,各个宽字符的值分别是:

7AEF 5348 8282

注:使用ideone编译。


相关内容:
wcstombs 将宽字符序列转换为多字节字符序列的函数。