strxfrm
|
Definido en el encabezado
<string.h>
|
||
| (hasta C99) | ||
| (desde C99) | ||
Transforma la cadena de bytes terminada en nulo apuntada por
src
a la forma definida por la implementación de manera que comparar dos cadenas transformadas con
strcmp
produce el mismo resultado que comparar las cadenas originales con
strcoll
, 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.
El comportamiento es indefinido si el
dest
array no es lo suficientemente grande. El comportamiento es indefinido si
dest
y
src
se superponen.
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 + strxfrm ( NULL , src, 0 )
Esta función se utiliza cuando se realizan múltiples comparaciones dependientes de la configuración regional utilizando la misma cadena o conjunto de cadenas, porque es más eficiente usar
strxfrm
para transformar todas las cadenas una sola vez, y posteriormente comparar las cadenas transformadas con
strcmp
.
Parámetros
| dest | - | puntero al primer elemento del array donde se escribirá la cadena transformada |
| src | - | puntero al primer carácter de una cadena de bytes terminada en nulo a transformar |
| count | - | número máximo de caracteres a escribir |
Valor de retorno
La longitud de la cadena transformada, sin incluir el carácter nulo terminador.
Ejemplo
#include <stdio.h> #include <string.h> #include <locale.h> int main(void) { setlocale(LC_COLLATE, "cs_CZ.iso88592"); const char *in1 = "hrnec"; char out1[1+strxfrm(NULL, in1, 0)]; strxfrm(out1, in1, sizeof out1); const char *in2 = "chrt"; char out2[1+strxfrm(NULL, in2, 0)]; strxfrm(out2, in2, sizeof out2); printf("In the Czech locale: "); if(strcmp(out1, out2) < 0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); printf("In lexicographical comparison: "); if(strcmp(in1, in2)<0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); }
Salida posible:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Referencias
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.24.4.5 La función strxfrm (p: 267)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.24.4.5 La función strxfrm (p: 366-367)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.21.4.5 La función strxfrm (p: 329-330)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.11.4.5 La función strxfrm
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) |
|
compara dos cadenas
(función) |
|
|
(C95)
|
transforma una cadena ancha para que
wcscmp
produzca el mismo resultado que
wcscoll
(función) |
|
Documentación de C++
para
strxfrm
|
|