wcsxfrm
|
定义于头文件
<wchar.h>
|
||
|
(C99前)
(C95起) |
||
| (C99起) | ||
将
src
所指向的空终止宽字符串转换为实现定义的形式,使得用
wcscmp
比较两个转换后的字符串,与在当前 C 语言区域设置下用
wcscoll
比较原始字符串的结果相同。
转换后的字符串的前
count
个字符(包括终止空字符)会被写入目标位置,同时返回完整转换后字符串的长度(不包括终止空字符)。
如果
count
为
0
,则允许
dest
为空指针。
目录 |
注释
接收整个转换后字符串的正确缓冲区长度为 1 + wcsxfrm ( NULL , src, 0 )
此函数适用于使用同一宽字符串或宽字符串集进行多次区域设置相关的比较场景,因为更高效的做法是:先使用
wcsxfrm
对所有字符串仅进行一次转换,随后通过
wcscmp
比较转换后的宽字符串。
参数
| dest | - | 指向用于写入转换后字符串的宽空终止字符串首元素的指针 |
| 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