strxfrm
|
Определено в заголовке
<string.h>
|
||
| (до C99) | ||
| (начиная с C99) | ||
Преобразует байтовую строку с нулевым завершителем, на которую указывает
src
, в форму, определяемую реализацией, таким образом, что сравнение двух преобразованных строк с помощью
strcmp
дает тот же результат, что и сравнение исходных строк с помощью
strcoll
в текущей локали C.
Первые
count
символов преобразованной строки записываются в назначение, включая завершающий нулевой символ, и возвращается длина полной преобразованной строки, исключая завершающий нулевой символ.
Поведение не определено, если массив
dest
недостаточно велик. Поведение не определено, если
dest
и
src
перекрываются.
Если
count
равен
0
, тогда
dest
может быть нулевым указателем.
Содержание |
Примечания
Правильная длина буфера, которая может принять всю преобразованную строку, равна 1 + strxfrm ( NULL , src, 0 )
Эта функция используется при выполнении множественных сравнений, зависящих от локали, с использованием одной и той же строки или набора строк, поскольку более эффективно применять
strxfrm
для преобразования всех строк только один раз, а затем сравнивать преобразованные строки с помощью
strcmp
.
Параметры
| dest | - | указатель на первый элемент массива, в который будет записана преобразованная строка |
| src | - | указатель на первый символ нуль-терминированной байтовой строки для преобразования |
| count | - | максимальное количество символов для записи |
Возвращаемое значение
Длина преобразованной строки, не включая завершающий нулевой символ.
Пример
#include <stdio.h> #include <string.h> #include <locale.h> int main(void) { setlocale(LC_COLLATE, "cs_CZ.iso88592"); const char *in1 = "hrnec"; char out1[1+strxfrm(NULL, in1, 0)]; strxfrm(out1, in1, sizeof out1); const char *in2 = "chrt"; char out2[1+strxfrm(NULL, in2, 0)]; strxfrm(out2, in2, sizeof out2); printf("In the Czech locale: "); if(strcmp(out1, out2) < 0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); printf("In lexicographical comparison: "); if(strcmp(in1, in2)<0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); }
Возможный вывод:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.24.4.5 Функция strxfrm (стр. 267)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.24.4.5 Функция strxfrm (стр: 366-367)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.21.4.5 Функция strxfrm (стр: 329-330)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.11.4.5 Функция strxfrm
Смотрите также
|
сравнивает две строки в соответствии с текущей локалью
(функция) |
|
|
(C95)
|
сравнивает две широкие строки в соответствии с текущей локалью
(функция) |
|
сравнивает две строки
(функция) |
|
|
(C95)
|
преобразует широкую строку так, чтобы
wcscmp
выдавал тот же результат, что и
wcscoll
(функция) |
|
Документация C++
для
strxfrm
|
|