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 идентична предыдущей функции, но вместо текущего языкового стандарта в ней используется языковой стандарт, передаваемый в качестве параметра. Дополнительные сведения см. в разделе Locale.

После преобразования вызов strcmp с двумя преобразованными строками дает результаты, идентичные результатам вызова, примененного к strcoll исходным двум строкам. Как и функции strcoll и stricoll, функция strxfrm при необходимости автоматически обрабатывает строки многобайтовых символов.

wcsxfrm — это версия функции strxfrm для расширенных символов; строковые аргументы функции wcsxfrm представляют собой указатели на расширенные символы. Для wcsxfrm, после преобразования строки вызов с двумя преобразованными строками дает результаты, идентичные результатам вызова wcscmp , примененного к wcscoll исходным двум строкам. Поведениеwcsxfrm и strxfrm идентично в противном случае. Функция wcsxfrm использует текущий языковой стандарт для поведения, зависящего от языкового стандарта; функция _wcsxfrm_l вместо текущего языкового стандарта использует языковой стандарт, который передается в качестве параметра.

Эти функции проверяют свои параметры. Если strSource указатель имеет значение NULL или 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 в основном оболочка вокруг LCMapString LCMAP_SORTKEY.

Значение следующего выражения — это размер массива, необходимого для хранения strxfrm-преобразования исходной строки:

1 + strxfrm( NULL, string, 0 )

Только в языковом стандарте strxfrm "C" эквивалентен следующим вызовам функций:

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
setlocale, _wsetlocale
Локаль
Обработка строк
Функции strcoll
strcmp, , wcscmp_mbscmp
strncmp, , wcsncmp_mbsncmp_mbsncmp_l