wcsxfrm
| Definido en el encabezado <wchar.h>
|
||
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );
|
(desde C95) (hasta C99) |
|
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 modo que comparar dos cadenas transformadas con wcscmp dé 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 de terminación, y se devuelve la longitud de la cadena transformada completa, excluyendo el carácter nulo de terminación.
Si count es 0, entonces se permite que dest sea un puntero nulo.
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 usando 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 ancha terminada en nulo a transformar |
| count | - | número máximo de caracteres a escribir |
Valor de retorno
La longitud de la cadena ancha transformada, sin incluir el carácter nulo de terminación.
Ejemplo
#include <locale.h>
#include <stdio.h>
#include <wchar.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 C23 (ISO/IEC 9899:2024):
- 7.29.4.4.4 La función wcsxfrm (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.29.4.4.4 La función wcsxfrm (p: TBD)
- 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 con la configuración regional actual (función) | |
(C95) |
compara dos cadenas anchas de acuerdo con la configuración regional actual (función) |
(C95) |
compara dos cadenas anchas (función) |
| transforma una cadena de modo que strcmp produzca el mismo resultado que strcoll (función) | |
Documentación de C++ para wcsxfrm
| |