strxfrm
|
定义于头文件
<string.h>
|
||
| (C99前) | ||
| (C99起) | ||
将
src
所指向的空终止字节字符串转换为实现定义的形式,使得用
strcmp
比较两个转换后的字符串,与在当前 C 语言区域设置下用
strcoll
比较原始字符串的结果相同。
转换后的字符串前
count
个字符(包括终止空字符)将被写入目标位置,同时返回完整转换后字符串的长度(不包括终止空字符)。
若
dest
数组空间不足,则行为未定义。若
dest
与
src
存在内存重叠,则行为未定义。
如果
count
为
0
,则允许
dest
为空指针。
目录 |
注释
接收整个转换后字符串的正确缓冲区长度是 1 + strxfrm ( NULL , src, 0 )
此函数在进行多次依赖于区域设置的字符串比较时使用,因为更高效的做法是使用
strxfrm
一次性转换所有字符串,随后通过
strcmp
比较转换后的字符串。
参数
| dest | - | 指向待写入转换字符串的数组首元素的指针 |
| src | - | 指向待转换的空终止字节字符串首字符的指针 |
| count | - | 最大写入字符数 |
返回值
转换后字符串的长度,不包括终止空字符。
示例
#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); }
可能的输出:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
参考文献
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.24.4.5 strxfrm 函数 (p: 267)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.24.4.5 strxfrm 函数 (页码: 366-367)
- C99标准(ISO/IEC 9899:1999):
-
- 7.21.4.5 strxfrm函数(页码:329-330)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.11.4.5 strxfrm 函数
参见
|
根据当前区域设置比较两个字符串
(函数) |
|
|
(C95)
|
根据当前区域设置比较两个宽字符串
(函数) |
|
比较两个字符串
(函数) |
|
|
(C95)
|
转换宽字符串,使得
wcscmp
能产生与
wcscoll
相同的结果
(函数) |
|
C++ 文档
关于
strxfrm
|
|