Namespaces
Variants

wcsxfrm

From cppreference.net
< c ‎ | string ‎ | wide
Definido en el encabezado <wchar.h>
size_t wcsxfrm ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(hasta C99)
(desde C95)
size_t wcsxfrm ( wchar_t * restrict dest, const wchar_t * restrict src, size_t count ) ;
(desde C99)

Transforma la cadena ancha terminada en nulo apuntada por src a la forma definida por la implementación de manera que comparar dos cadenas transformadas con wcscmp produce el mismo resultado que comparar las cadenas originales con wcscoll , en la configuración regional C actual.

Los primeros count caracteres de la cadena transformada se escriben en el destino, incluyendo el carácter nulo terminador, y se devuelve la longitud de la cadena transformada completa, excluyendo el carácter nulo terminador.

Si count es 0 , entonces dest puede ser un puntero nulo.

Contenidos

Notas

La longitud correcta del búfer que puede recibir toda la cadena transformada es 1 + wcsxfrm ( NULL , src, 0 )

Esta función se utiliza cuando se realizan múltiples comparaciones dependientes de la configuración regional utilizando la misma cadena ancha o conjunto de cadenas anchas, porque es más eficiente usar wcsxfrm para transformar todas las cadenas una sola vez, y posteriormente comparar las cadenas anchas transformadas con wcscmp .

Parámetros

dest - puntero al primer elemento de una cadena ancha terminada en nulo donde escribir la cadena transformada
src - puntero a la cadena de caracteres anchos terminada en nulo que se va a transformar
count - número máximo de caracteres a generar

Valor de retorno

La longitud de la cadena ancha transformada, sin incluir el carácter nulo de terminación.

Ejemplo

#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);
}

Salida:

In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år

Referencias

  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.29.4.4.4 La función wcsxfrm (p: 434-435)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.24.4.4.4 La función wcsxfrm (p: 380-381)

Véase también

compara dos cadenas de acuerdo a la configuración regional actual
(función)
(C95)
compara dos cadenas anchas de acuerdo a la configuración regional actual
(función)
(C95)
compara dos cadenas anchas
(función)
transforma una cadena para que strcmp produzca el mismo resultado que strcoll
(función)