Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразует строку на основе данных языкового стандарта.
Синтаксис
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