strxfrm、wcsxfrm、_strxfrm_l、_wcsxfrm_l

基于特定的区域设置信息转换字符串。

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
    要使用的区域设置。

返回值

返回转换字符串的长度,不计空终止字符。 如果返回值大于或等于 count, strDest 的内容是无法预计的。 对于一个错误,每个函数将设置为 errno 并返回 INT_MAX。 对于无效字符,errno 设置为 EILSEQ。

备注

strxfrm 函数将由 strSource 指向的字符串转换成存储在 strDest中的新的分页表格。 仅仅是count 字符,其中包括空字符,被转换并放置到结果字符串。 使用区域设置的 LC_COLLATE 类别设置进行转换。 有关LC_COLLATE的详细信息, 请参阅 setlocale。 strxfrm 为其独立区域设置行为使用当前区域设置;_strxfrm_l 相同,除了它使用区域设置传递而不是当前区域设置。 有关详细信息,请参阅区域设置

转换之后,使用两个转换字符串对 strcmp 的调用使用让产生的结果与应用于两个原始字符串 strcoll 的调用是相同的。 与 strcoll 和 stricoll类似,strxfrm 自动处理相应的多字节字符串。

wcsxfrm 是 strxfrm的宽字符版本;wcsxfrm 的字符串参数是宽指针。 对于wcsxfrm,字符串转换之后,使用两个转换字符串对 wcscmp 的调用产生的结果与应用于两个原始字符串对wcscoll 的调用是相同的。 wcsxfrm 和 strxfrm 行为相同,否则。 对于区域设置独立行为,wcsxfrm 使用当前区域设置;_wcsxfrm_l 使用区域设置传递而不是当前区域设置。

这些函数验证其参数。 如果 strSource 为空指针,或 strDest 为空指针 (除非计数为零),或者如果 count 大于 INT_MAX,则调用无效参数处理程序,正如 参数验证 所述。 如果允许继续执行,则这些函数将 errno 设置为 EINVAL,并返回INT_MAX。

一般文本例程映射

TCHAR.H 例程

_UNICODE & _MBCS 未定义

已定义 _MBCS

已定义 _UNICODE

_tcsxfrm

strxfrm

strxfrm

wcsxfrm

_tcsxfrm_l

_strxfrm_l

_strxfrm_l

_wcsxfrm_l

在“C”区域设置,在字符集中的字符顺序 (ASCII 字符集) 和字典序中的字符顺序是一样的。 但是,在其他区域设置中,字符集的字符顺序可能不同于字典字符顺序。 例如,在某些欧洲区域设置,在字符集中,字符“a”(值 0x61) 位于字符 'ä' (值 0xE4)之前,但是,在字典序列中,字符“ä”在字符" a ”之前。

在字符集和字典字符顺序不同的区域设置中,根据当前区域设置的 LC_COLLATE 类别设置,在原始字符串上使用 strxfrm ,然后在结果字符串上使用 strcmp 生成一个字典字符串进行比较。 因此,在上面的区域设置中字典序地比较两个字符串,请在原始字符串上使用 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>

有关其他兼容性信息,请参见“简介”中的兼容性

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例

请参见

参考

数据转换

localeconv

setlocale、_wsetlocale

区域设置

字符串操作 (CRT)

strcoll 函数

strcmp、wcscmp、_mbscmp

strncmp、wcsncmp、_mbsncmp、_mbsncmp_l