wcsxfrm
Определено в заголовке <wchar.h> |
||
|---|---|---|
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count ); |
(до C99) (с C95) |
|
size_t wcsxfrm( wchar_t* restrict dest, const wchar_t* restrict src, size_t count ); |
(с 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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/wide/wcsxfrm