C

wcsxfrm

wcsxfrm

在头文件中定义
size_t wcsxfrm(wchar_t * dest,const wchar_t * src,size_t count);(直到C99)(自C95以来)
size_t wcsxfrm(wchar_t * restrict dest,const wchar_t * restrict src,size_t count);(自C99以来)

将指向的以null结尾的宽字符串src转换为实现定义的表单,以便比较两个转换后的字符串,wcscmp并在原始字符串与wcscoll当前C语言环境中进行比较时得到相同的结果。

count转换后的字符串的第一个字符写入目标,包括终止空字符,并返回完整转换的字符串的长度,不包括终止空字符。

如果count​0​,则dest允许为空指针。

注意

可以接收整个转换字符串的缓冲区的正确长度为1+wcsxfrm(NULL, src, 0)

当使用同一个宽字符串或一组宽字符串进行多个与区域相关的比较时,使用此函数,因为使用wcsxfrm一次只转换所有字符串的效率更高,并随后比较转换后的宽字符串wcscmp

参数

dest-指向广泛的以null结尾的字符串的第一个元素的指针,以将已转换的字符串写入
src-指向以空字符结尾的宽字符串进行转换的指针
count-最大输出字符数

返回值

转换后的宽字符串的长度,不包括终止的空字符。

示例

#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "sv_SE.utf8" const wchar_t *in1 = L"\u00e5r"; wchar_t out1[1+wcsxfrm(NULL, in1, 0)]; wcsxfrm(out1, in1, sizeof out1/sizeof *out1 const wchar_t *in2 = L"\u00e4ngel"; wchar_t out2[1+wcsxfrm(NULL, in2, 0)]; wcsxfrm(out2, in2, sizeof out2/sizeof *out2 printf("In the Swedish locale: " if(wcscmp(out1, out2) < 0) printf("%ls before %ls\n", in1, in2 else printf("%ls before %ls\n", in2, in1 printf("In lexicographical comparison: " if(wcscmp(in1, in2) < 0) printf("%ls before %ls\n", in1, in2 else printf("%ls before %ls\n", in2, in1 }

输出:

In the Swedish locale: år before ängel In lexicographical comparison: ängel before år

参考

  • C11标准(ISO/IEC 9899:2011):

另请参阅

与strcoll根据当前语言环境(函数)比较两个字符串
wcscoll(C95)根据当前语言环境(函数)比较两个宽字符串
wcscmp(C95)比较两个宽字符串(函数)
strxfrm转换一个字符串,以便strcmp产生与strcoll(function)相同的结果

| C ++文档wcsxfrm |