当前位置: C语言 -- 标准库 -- <string.h> -- strxfrm

strxfrm函数


概要:
#include <string.h>
size_t strxfrm(char * restrict s1, 
      const char * restrict s2, 
      size_t n);

描述:

该函数根据当前语言环境的LC_COLLATE类别转换参数s2指向的字符串,然后将转换结果存入参数s1指向的数组。

使用strcmp函数比较两个转换后的字符串,将返回一个大于、等于或者小于0的值,该值与使用strcoll函数比较相同源字符串的结果相同。最多n个字符(包括终止空字符)存入参数s1指向的数组。如果参数n的值为0,参数s1可以是空指针。如果复制发生在重叠对象之间,函数行为是未定义的。


存储s2指向字符串转换结果的数组所需大小可使用以下表达式计算:

1 + strxfrm(NULL, s2, 0)


参数:
char * restrict s1

指向目标数组的指针,结果字符串将存入该数组。

const char * restrict s2

指向源字符串的指针。

size_t n

最多可以存入参数s1指向数组的字符数。


返回值:

函数返回转换后字符串的长度,但不包括终止空字符。如果返回值大于等于参数n,参数s1指向数组的内容是不确定的。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
/*函数strxfrm范例*/
 
#include <locale.h>
#include <stdio.h>
#include <string.h>

/*输出字符串比较结果的函数。*/
void func(int value, const char *s1, const char *s2)
{
    if(value>0)
        printf("%s is greater than %s.\n", s1, s2);
    else if(value<0)
        printf("%s is less than %s.\n", s1, s2);
    else
        printf("%s is equal to %s.\n", s1, s2);
}

int main(void)
{
    setlocale(LC_COLLATE, "");
    
    const char s1[] = "string";
    const char s2[] = "String";
    int value;
    char t1[1+strxfrm(NULL, s1, 0)];   //存储s1转换后的字符串。
    char t2[1+strxfrm(NULL, s2, 0)];   //存储s2转换后的字符串。

    /*转换前。*/
    puts("Before transformation:");

    /*使用strcmp函数比较源字符串。*/
    value = strcmp(s1, s2);
    printf("strcmp: ");
    func(value, s1, s2);

    /*使用strcoll函数比较源字符串。*/
    value = strcoll(s1, s2);
    printf("strcoll: ");
    func(value, s1, s2);

    puts("");

    /*转换字符串。*/
    strxfrm(t1, s1, sizeof(t1));
    strxfrm(t2, s2, sizeof(t2));

    /*转换后。*/
    puts("After transformation:");

    /*使用strcmp函数比较转换后字符串。*/
    value = strcmp(t1, t2);
    printf("strcmp: ");
    func(value, s1, s2);
    
    return 0;
}


输出:

Before transformation:

strcmp: string is greater than String.

strcoll: string is less than String.

 

After transformation:

strcmp: string is less than String.


相关内容:
memcmp 比较内存区域字符序列的函数。
strcmp 比较字符串的函数。
strcoll 比较字符串的函数。
strncmp 比较字符串前n个字符的函数。