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