wcsrtombs_s函数
概要:
#define __STDC_WANT_LIB_EXT1__ 1 #include <wchar.h> errno_t wcsrtombs_s(size_t * restrict retval, char * restrict dst, rsize_t dstmax, const wchar_t ** restrict src, rsize_t len, mbstate_t * restrict ps);
描述:
该函数将参数src间接指向的数组中宽字符序列转换为对应的多字节字符序列(多字节字符序列开始时的转换状态使用参数ps指向的对象描述。)。如果参数dst不是空指针,转换得到的多字节字符存入参数dst指向的数组;转换直至并包括终止空宽字符,转换得到的终止空字符也会被保存。
两种情况下转换会提前终止:
1、转换遇到没有对应有效多字节字符的宽字符。
2、如果参数dst不是空指针,下一个多字节字符超出存储到参数dst指向数组的n个总字节的限制(如果转换的宽字符是空宽字符,n是len和dstmax中的较小者;否则n是len和dstmax - 1中的较小者。)。
如果参数dst不是空指针,并且在没有转换空宽字符前转换终止,函数将向存储到参数dst指向数组的多字节字符后添加空字符。每次转换都像调用一次wcrtomb函数。
如果参数dst不是空指针,将为参数src指向的指针对象分配一个空指针(如果由于到达终止空宽字符而停止转换。)或者刚刚转换的最后一个宽字符的地址(如果存在。)。如果转换由于到达终止空宽字符而停止,结果状态将是初始转换状态。
无论参数dst是否为空指针,如果输入转换遇到没有对应有效多字节字符的宽字符,将发生编码错误,函数将(size_t)(-1)存储到*retval,并且转换状态是不确定的;否则函数将结果多字节字符序列的字节数(不包括终止空字符)存储到*retval。
wcsrtombs_s函数返回时,参数dst指向的数组中wcsrtombs_s函数写入的终止空字符(如果有)之后的所有元素值都是未指定的。
如果复制发生在重叠对象之间,对象值是不确定的。
运行约束:
参数retval、src、*src和ps不能是空指针。如果参数dst是空指针,参数dstmax应等于0。如果参数dst不是空指针,参数len应不大于RSIZE_MAX/sizeof(wchar_t),参数dstmax应不大于宏RSIZE_MAX。如果参数dst不是空指针,且参数len不小于参数dstmax,转换遇到终止空宽字符或者编码错误时终止。
如果存在运行约束冲突,wcsrtombs_s函数执行以下操作:如果参数retval不是空指针,函数将*retval设置为(size_t)(-1);如果参数dst不是空指针,并且参数dstmax大于0且不大于宏RSIZE_MAX,函数将dst[0]设置为空字符。
参数:
指向size_t类型对象的指针,指向的对象存储转换得到的多字节字符序列的字节数。
指向char类型数组的指针,转换得到的多字节字符将存入该数组。
参数dst指向数组可以写入多字节字符序列的最大字节数。
指向宽字符序列的指针。
存入数组的多字节字符序列的最大字节数。
指向mbstate_t类型对象的指针,指向对象记录关联多字节字符的当前转换状态。
返回值:
如果不存在运行约束冲突和编码错误,函数返回0;否则函数返回非0值。
范例:
|
|
输出:
我爱中国
注:使用Visual Studio编译。
相关内容:
wcrtomb_s | 将宽字符转换为多字节字符序列的安全函数。 |
mbsrtowcs_s | 将多字节字符序列转换为宽字符序列的安全函数。 |