首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

strxfrm

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

size_t strxfrm(char * dest,const char * src,size_t count);

(直到C99)

size_t strxfrm(char * restrict dest,const char * restrict src,size_t count);

(自C99以来)

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

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

如果dest数组不够大,行为是不确定的。 如果dest和src重叠,则行为不确定。

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

注意

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

参数

dest

-

指向将写入转换后的字符串的数组的第一个元素的指针

SRC

-

指向要转换的以空字符结尾的字节字符串的第一个字符的指针

count

-

要写入的最大字符数

返回值

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

当使用相同的字符串或字符串集合进行多个与区域相关的比较时,会使用此函数,因为使用strxfrm将所有字符串转换一次,然后将转换后的字符串与strcmp进行比较效率更高。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
int main(void)
{
    setlocale(LC_COLLATE, "cs_CZ.iso88592");
 
    const char *in1 = "hrnec";
    char out1[1+strxfrm(NULL, in1, 0)];
    strxfrm(out1, in1, sizeof out1);
 
    const char *in2 = "chrt";
    char out2[1+strxfrm(NULL, in2, 0)];
    strxfrm(out2, in2, sizeof out2);
 
    printf("In the Czech locale: ");
    if(strcmp(out1, out2) < 0)
         printf("%s before %s\n",in1, in2);
    else
         printf("%s before %s\n",in2, in1);
 
    printf("In lexicographical comparison: ");
    if(strcmp(in1, in2)<0)
         printf("%s before %s\n",in1, in2);
    else
         printf("%s before %s\n",in2, in1);
 
}

输出:

代码语言:javascript
复制
In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.24.4.5 strxfrm函数(p:366-367)
  • C99标准(ISO / IEC 9899:1999):
    • 7.21.4.5 strxfrm函数(p:329-330)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.11.4.5 strxfrm函数

扩展内容

strcoll

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

wcscoll(C95)

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

STRCMP

比较两个字符串(功能)

wcsxfrm(C95)

转换宽字符串以使wcscmp产生与wcscoll(函数)相同的结果

| strxfrm的C ++文档 |

扫码关注腾讯云开发者

领取腾讯云代金券