wcsxfrm
来自cppreference.com
在标头 <wchar.h> 定义
|
||
(C99 前) (C95 起) |
||
(C99 起) | ||
变换 src
所指向的空终止宽字符串为实现定义的形式,满足在当前 C 本地环境中,用 wcscmp 比较两个变换后的字符串给出的结果与用 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