wcsxfrm
来自 cppreference.com
定义在头文件 <wchar.h> 中 |
||
(直到 C99) (自 C95) |
||
(自 C99) | ||
将由 src
指向的以空字符结尾的宽字符串转换为实现定义的形式,这样使用 wcscmp 比较两个转换后的字符串将给出与使用 wcscoll 比较原始字符串相同的结果,在当前的 C 本地化环境中。
转换后的字符串的前 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