Namespaces
Variants

wcsxfrm

From cppreference.net
< c ‎ | string ‎ | wide
Определено в заголовочном файле <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
(функция)