wcsxfrm
|
Определено в заголовочном файле
<wchar.h>
|
||
|
(до C99)
(с C95) |
||
| (с C99) | ||
Преобразует широкую строку с нулевым завершителем, на которую указывает
src
, в форму, определяемую реализацией, таким образом, что сравнение двух преобразованных строк с помощью
wcscmp
дает тот же результат, что и сравнение исходных строк с помощью
wcscoll
в текущей локали C.
Первые
count
символов преобразованной строки записываются в назначение, включая завершающий нулевой символ, и возвращается длина полной преобразованной строки, исключая завершающий нулевой символ.
Если
count
равен
0
, то
dest
может быть нулевым указателем.
Содержание |
Примечания
Правильная длина буфера, которая может принять всю преобразованную строку, равна 1 + wcsxfrm ( NULL , src, 0 )
Эта функция используется при выполнении множественных зависящих от локали сравнений с использованием той же широкой строки или набора широких строк, поскольку более эффективно применять
wcsxfrm
для преобразования всех строк только один раз, а затем сравнивать преобразованные широкие строки с помощью
wcscmp
.
Параметры
| dest | - | указатель на первый элемент широкой строки с нулевым завершителем для записи преобразованной строки |
| src | - | указатель на преобразуемую широкую строку с нулевым завершителем |
| count | - | максимальное количество выводимых символов |
Возвращаемое значение
Длина преобразованной широкой строки, не включая завершающий нулевой символ.
Пример
#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "sv_SE.utf8"); const wchar_t *in1 = L"\u00e5r"; wchar_t out1[1+wcsxfrm(NULL, in1, 0)]; wcsxfrm(out1, in1, sizeof out1/sizeof *out1); const wchar_t *in2 = L"\u00e4ngel"; wchar_t out2[1+wcsxfrm(NULL, in2, 0)]; wcsxfrm(out2, in2, sizeof out2/sizeof *out2); printf("In the Swedish locale: "); if(wcscmp(out1, out2) < 0) printf("%ls before %ls\n", in1, in2); else printf("%ls before %ls\n", in2, in1); printf("In lexicographical comparison: "); if(wcscmp(in1, in2) < 0) printf("%ls before %ls\n", in1, in2); else printf("%ls before %ls\n", in2, in1); }
Вывод:
In the Swedish locale: år before ängel In lexicographical comparison: ängel before år
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.29.4.4.4 Функция wcsxfrm (стр. 434-435)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.24.4.4.4 Функция wcsxfrm (стр. 380-381)
Смотрите также
|
сравнивает две строки в соответствии с текущей локалью
(функция) |
|
|
(C95)
|
сравнивает две широкие строки в соответствии с текущей локалью
(функция) |
|
(C95)
|
сравнивает две широкие строки
(функция) |
|
преобразует строку так, чтобы strcmp давал тот же результат, что и strcoll
(функция) |
|
|
Документация C++
для
wcsxfrm
|
|