strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_lstrxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

Преобразует строку на основе данных языкового стандарта.Transform a string based on locale-specific information.

СинтаксисSyntax

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
);

ПараметрыParameters

стрдестstrDest
Конечная строка.Destination string.

стрсаурцеstrSource
Исходная строка.Source string.

countcount
Максимальное число символов для размещения в стрдест.Maximum number of characters to place in strDest.

localelocale
Используемый языковой стандарт.The locale to use.

Возвращаемое значениеReturn Value

Возвращает длину преобразованной строки, не считая завершающий нуль-символ.Returns the length of the transformed string, not counting the terminating null character. Если возвращаемое значение больше или равно Count, содержимое стрдест является непредсказуемым.If the return value is greater than or equal to count, the content of strDest is unpredictable. При возникновении ошибки каждая функция устанавливает значение , а возвращает INT_MAX.On an error, each function sets errno and returns INT_MAX. Для недопустимого символа параметру « еилсек» присваивается значение « ошибка».For an invalid character, errno is set to EILSEQ.

КомментарииRemarks

Функция стрксфрм преобразует строку, на которую указывает стрсаурце , в новую форму с сортировкой, которая хранится в стрдест.The strxfrm function transforms the string pointed to by strSource into a new collated form that is stored in strDest. Не более, чем количество символов, включая символ null, преобразуются и помещаются в результирующую строку.No more than count characters, including the null character, are transformed and placed into the resulting string. Преобразование выполняется с помощью настройки LC_COLLATE категории языкового стандарта.The transformation is made using the locale's LC_COLLATE category setting. Дополнительные сведения о LC_COLLATE см. в разделе setlocale.For more information on LC_COLLATE, see setlocale. стрксфрм использует текущий языковой стандарт для поведения, зависящего от языкового стандарта; _strxfrm_l является идентичным за исключением того, что использует переданный языковой стандарт вместо текущего языкового стандарта.strxfrm uses the current locale for its locale-dependent behavior; _strxfrm_l is identical except that it uses the locale passed in instead of the current locale. Для получения дополнительной информации см. Locale.For more information, see Locale.

После преобразования вызов strcmp с двумя преобразованными строками дает результат, идентичный результатам вызова strcoll , применяемого к исходным двум строкам.After the transformation, a call to strcmp with the two transformed strings yields results identical to those of a call to strcoll applied to the original two strings. Как и в случае с strcoll и стриколл, стрксфрм автоматически обрабатывает строки многобайтовых символов соответствующим образом.As with strcoll and stricoll, strxfrm automatically handles multibyte-character strings as appropriate.

вксксфрм — это версия стрксфрм для расширенных символов; строковые аргументы вксксфрм — это указатели расширенных символов.wcsxfrm is a wide-character version of strxfrm; the string arguments of wcsxfrm are wide-character pointers. Для вксксфрм после преобразования строки вызов wcscmp с двумя преобразованными строками дает результат, идентичный вызову вксколл , примененному к исходным двум строкам.For wcsxfrm, after the string transformation, a call to wcscmp with the two transformed strings yields results identical to those of a call to wcscoll applied to the original two strings. в противном случае вксксфрм и стрксфрм ведут себя одинаково.wcsxfrm and strxfrm behave identically otherwise. вксксфрм использует текущий языковой стандарт для поведения, зависящего от языкового стандарта; _wcsxfrm_l использует переданный языковой стандарт вместо текущего языкового стандарта.wcsxfrm uses the current locale for its locale-dependent behavior; _wcsxfrm_l uses the locale passed in instead of the current locale.

Эти функции проверяют свои параметры.These functions validate their parameters. Если стрсаурце является пустым указателем, или стрдест является пустым указателем (если значение Count не равно нулю) или Count больше INT_MAX, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров .If strSource is a null pointer, or strDest is a NULL pointer (unless count is zero), or if count is greater than INT_MAX, the invalid parameter handler is invoked, as described in Parameter Validation . Если выполнение может быть продолжено, эти функции устанавливают значение еинвал и возвращают INT_MAX.If execution is allowed to continue, these functions set errno to EINVAL and return INT_MAX.

По умолчанию глобальное состояние этой функции ограничивается приложением.By default, this function's global state is scoped to the application. Чтобы изменить это, см. раздел глобальное состояние в CRT.To change this, see Global state in the CRT.

Универсальное текстовое сопоставление функцийGeneric-Text Routine Mappings

Подпрограмма TCHAR.HTCHAR.H routine _UNICODE и _MBCS не определены_UNICODE & _MBCS not defined _MBCS определено_MBCS defined _UNICODE определено_UNICODE defined
_tcsxfrm_tcsxfrm strxfrmstrxfrm strxfrmstrxfrm wcsxfrmwcsxfrm
_tcsxfrm_l_tcsxfrm_l _strxfrm_l_strxfrm_l _strxfrm_l_strxfrm_l _wcsxfrm_l_wcsxfrm_l

В языковом стандарте "C" порядок символов в наборе символов (кодировка ASCII) совпадает с лексикографическим порядком символов.In the "C" locale, the order of the characters in the character set (ASCII character set) is the same as the lexicographic order of the characters. Однако в других языковых стандартах порядок символов в наборе символов может отличаться от лексикографического порядка.However, in other locales, the order of characters in the character set may differ from the lexicographic character order. Например, в некоторых европейских языковых стандартах символ a (значение 0x61) предшествует символу ä (значение 0xE4) в наборе символов, но ä предшествует символу a лексикографически.For example, in certain European locales, the character 'a' (value 0x61) precedes the character 'ä' (value 0xE4) in the character set, but the character 'ä' precedes the character 'a' lexicographically.

В языковых стандартах, для которых кодировка и порядок символов лексикографическим порядком различаются, используйте стрксфрм в исходных строках, а затем strcmp в результирующих строках, чтобы получить лексикографическим порядком сравнение строк в соответствии с параметром LC_COLLATE категории текущего языкового стандарта.In locales for which the character set and the lexicographic character order differ, use strxfrm on the original strings and then strcmp on the resulting strings to produce a lexicographic string comparison according to the current locale's LC_COLLATE category setting. Таким же для сравнения двух строк, лексикографически в приведенном выше языковом стандарте, используйте стрксфрм для исходных строк, а затем strcmp в результирующих строках.Thus, to compare two strings lexicographically in the above locale, use strxfrm on the original strings, then strcmp on the resulting strings. Кроме того, для исходных строк можно использовать strcoll , а не strcmp .Alternately, you can use strcoll rather than strcmp on the original strings.

стрксфрм по сути является оболочкой вокруг LCMapString завершилось ошибкой с LCMAP_SORTKEY.strxfrm is basically a wrapper around LCMapString with LCMAP_SORTKEY.

Значение следующего выражения равно размеру массива, необходимого для хранения преобразования стрксфрм в исходной строке:The value of the following expression is the size of the array needed to hold the strxfrm transformation of the source string:

1 + strxfrm( NULL, string, 0 )

Только в языковом стандарте "C" стрксфрм эквивалентен следующему:In the "C" locale only, strxfrm is equivalent to the following:

strncpy( _string1, _string2, _count );
return( strlen( _string1 ) );

ТребованияRequirements

ПодпрограммаRoutine Обязательный заголовокRequired header
strxfrmstrxfrm <string.h>
wcsxfrmwcsxfrm <string.h> или <wchar.h><string.h> or <wchar.h>
_strxfrm_l_strxfrm_l <string.h>
_wcsxfrm_l_wcsxfrm_l <string.h> или <wchar.h><string.h> or <wchar.h>

Дополнительные сведения о совместимости см. в статье Compatibility.For additional compatibility information, see Compatibility.

См. также разделSee also

Преобразование данныхData Conversion
localeconvlocaleconv
setlocale, _wsetlocalesetlocale, _wsetlocale
ЛокальLocale
Управление строкамиString Manipulation
Функции strcollstrcoll Functions
strcmp, wcscmp, _mbscmpstrcmp, wcscmp, _mbscmp
strncmp, wcsncmp, _mbsncmp, _mbsncmp_lstrncmp, wcsncmp, _mbsncmp, _mbsncmp_l