wcrtomb函数
概要:
#include <wchar.h> size_t wcrtomb(char * restrict s, wchar_t wc, mbstate_t * restrict ps);
描述:
该函数将宽字符wc转换为对应的多字节字符序列,存入参数s指向的数组。
如果参数s是空指针,wcrtomb函数等价于
wcrtomb(buf, L'\0', ps)
其中参数buf是内部缓冲。
如果参数s不是空指针,函数确定参数wc对应的多字节字符的字节数(包括移位序列。);并将多字节字符的表示形式存入参数s指向的数组。最多可以存入MB_CUR_MAX个字节。如果参数wc是空宽字符,一个空字节将存储到参数s指向的数组中(该空字节会被前置恢复初始移位状态所需的移位序列。),*ps描述的结果状态将是初始转换状态。
与wctomb函数不同,wcrtomb函数存在一个额外参数ps,参数ps指向对象完整地描述了关联多字节字符序列的当前转换状态。如果参数ps是空指针,函数会使用内部mbstate_t对象,该对象在程序启动时初始化为初始转换状态;这种情况下,wcrtomb函数不要求避免与其它wcrtomb函数调用发生数据竞争。实现应像没有库函数使用ps空指针调用wcrtomb函数一样。wcrtomb函数的返回值不表示编码是否依赖于状态。
ISO/IEC 9899:2018标准定义了该函数的安全版本wcrtomb_s。
参数:
指向char类型对象的指针。如果参数s不是空指针,转换得到的多字节字符序列将存入参数s指向的数组中。
wchar_t类型的宽字符。
指向mbstate_t类型对象的指针,指向对象记录关联多字节字符序列的当前转换状态。
返回值:
函数返回存入参数s指向数组的字节数(包括移位序列)。如果参数wc不是一个有效的宽字符,将发生编码错误,函数将宏EILSEQ值存入errno,并返回(size_t)(-1),此外转换状态是不明确的。
范例:
|
|
输出:
转换前:
0X5929 0X751F 0X6211 0X6750 0X5FC5 0X6709 0X7528 0X3002 0
转换后:
0XE5 0XA4 0XA9 0XE7 0X94 0X9F 0XE6 0X88 0X91 0XE6 0X9D 0X90 0XE5 0XBF 0X85 0XE6 0X9C 0X89 0XE7 0X94 0XA8 0XE3 0X80 0X82 0
注:使用ideone.com编译。
相关内容:
mbrlen | 确定多字节字符字节数的函数。 |
mbrtowc | 将多字节字符序列转换为宽字符的函数。 |