非常教程

C参考手册

字符串 | Strings

wcsxfrm

在头文件<wchar.h>中定义

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):
    • 7.29.4.4.4 wcsxfrm函数(p: 434-435)
  • C99标准(ISO/IEC 9899:1999):
    • 7.24.4.4.4 wcsxfrm函数(p: 380-381)

另请参阅

与strcoll

根据当前语言环境(函数)比较两个字符串

wcscoll(C95)

根据当前语言环境(函数)比较两个宽字符串

wcscmp(C95)

比较两个宽字符串(函数)

strxfrm

转换一个字符串,以便strcmp产生与strcoll(function)相同的结果

| C ++文档wcsxfrm |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。