根据区域设置特定信息转换字符串。
语法
size_t strxfrm(
char *strDest,
const char *strSource,
size_t count
);
size_t wcsxfrm(
wchar_t *strDest,
const wchar_t *strSource,
size_t count
);
size_t _strxfrm_l(
char *strDest,
const char *strSource,
size_t count,
_locale_t locale
);
size_t wcsxfrm_l(
wchar_t *strDest,
const wchar_t *strSource,
size_t count,
_locale_t locale
);
参数
strDest
目标字符串。
strSource
资源字符串。
count
要放入到 strDest
中的最大字符数。
locale
要使用的区域设置。
返回值
返回转换的字符串的长度(不算结尾的 null 字符)。 如果返回值大于或等于 count
,则 strDest
的内容不可预知。 发生错误时,每个函数将设置 errno
并返回 INT_MAX
。 对于无效字符,errno
将设置为 EILSEQ
。
备注
strxfrm
函数将由 strSource
指向的字符串转换为存储在 strDest
中新的排序格式。 进行转换并放入到结果字符串中的字符不超过 count
指定的字符数(含 null 字符)。 将使用区域设置的 LC_COLLATE
类别设置进行转换。 有关 LC_COLLATE
的详细信息,请参阅 setlocale
。 strxfrm
对其与区域设置相关的行为使用当前区域设置;_strxfrm_l
与此类似,只不过它使用传入的区域设置而不是当前区域设置。 有关详细信息,请参阅 Locale。
转换完成之后,使用两个已转换的字符串调用 strcmp
产生的结果与对两个原始字符串调用 strcoll
产生的结果相同。 与 strcoll
和 stricoll
一样,strxfrm
会根据需要自动处理多字节字符串。
wcsxfrm
是 strxfrm
的宽字符版本;wcsxfrm
的字符串参数是宽字符指针。 对于 wcsxfrm
,在字符串转换之后,使用两个已转换的字符串调用 wcscmp
产生的结果与对两个原始字符串调用 wcscoll
产生的结果相同。 除此以外,wcsxfrm
和 strxfrm
的行为完全相同。 wcsxfrm
对其与区域设置相关的行为使用当前区域设置;_wcsxfrm_l
使用传入的区域设置而不是当前区域设置。
这些函数验证其参数。 如果 strSource
为空指针,或 strDest
为 NULL
指针(除非计数为零),或者如果 count
大于 INT_MAX
,则将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些功能将 errno
设置为 EINVAL
并返回 INT_MAX
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcsxfrm |
strxfrm |
strxfrm |
wcsxfrm |
_tcsxfrm_l |
_strxfrm_l |
_strxfrm_l |
_wcsxfrm_l |
在“C”区域设置中,字符集(ASCII 字符集)中的字符顺序与字典中的字符顺序相同。 但是在其他区域设置中,字符集中的字符顺序可能与字典中的字符顺序不同。 例如,在某些欧洲区域设置中,字符集中的字符“a”(值 0x61)位于字符“ä”(值 0xE4)之前,但在字典顺序中字符“ä”位于字符“a”之前。
在字符集中的字符顺序与字典中的字符顺序不同的区域设置中,请对原始字符串使用 strxfrm
,然后对结果字符串使用 strcmp
,以根据当前区域设置的 LC_COLLATE
类别设置,生成按字典顺序进行的字符串比较。 因此,若要在以上区域设置中按字典顺序比较两个字符串,请对原始字符串使用 strxfrm
,然后对结果字符串使用 strcmp
。 或者,可以对原始字符串使用 strcoll
而不是 strcmp
。
strxfrm
基本上是一个带有 LCMAP_SORTKEY
的围绕 LCMapString
的包装器。
以下表达式的值是进行源字符串的 strxfrm
转换所需的数组的大小:
1 + strxfrm( NULL, string, 0 )
仅在“C”区域设置中,strxfrm
才等效于以下函数调用:
strncpy( _string1, _string2, _count );
return( strlen( _string1 ) );
要求
例程 | 必需的标头 |
---|---|
strxfrm |
<string.h> |
wcsxfrm |
<string.h> 或 <wchar.h> |
_strxfrm_l |
<string.h> |
_wcsxfrm_l |
<string.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
另请参阅
数据转换
localeconv
%>
区域设置
字符串操作
strcoll
函数
.- .