strxfrm
|
Défini dans l'en-tête
<string.h>
|
||
| (jusqu'à C99) | ||
| (depuis C99) | ||
Transforme la chaîne d'octets terminée par un caractère nul pointée par
src
dans la forme définie par l'implémentation de telle sorte que la comparaison de deux chaînes transformées avec
strcmp
donne le même résultat que la comparaison des chaînes originales avec
strcoll
, dans les paramètres régionaux C actuels.
Les premiers
count
caractères de la chaîne transformée sont écrits dans la destination, y compris le caractère nul de terminaison, et la longueur de la chaîne transformée complète est renvoyée, à l'exclusion du caractère nul de terminaison.
Le comportement est indéfini si le tableau
dest
n'est pas suffisamment grand. Le comportement est indéfini si
dest
et
src
se chevauchent.
Si
count
est
0
, alors
dest
peut être un pointeur nul.
Table des matières |
Notes
La longueur correcte du tampon qui peut recevoir la chaîne transformée entière est 1 + strxfrm ( NULL , src, 0 )
Cette fonction est utilisée lors de multiples comparaisons dépendantes des paramètres régionaux utilisant la même chaîne ou le même ensemble de chaînes, car il est plus efficace d'utiliser
strxfrm
pour transformer toutes les chaînes une seule fois, puis de comparer ultérieurement les chaînes transformées avec
strcmp
.
Paramètres
| dest | - | pointeur vers le premier élément du tableau où la chaîne transformée sera écrite |
| src | - | pointeur vers le premier caractère d'une chaîne d'octets terminée par un caractère nul à transformer |
| count | - | nombre maximum de caractères à écrire |
Valeur de retour
La longueur de la chaîne transformée, sans inclure le caractère nul de fin.
Exemple
#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); }
Sortie possible :
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.24.4.5 La fonction strxfrm (p : 267)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.24.4.5 La fonction strxfrm (p: 366-367)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.21.4.5 La fonction strxfrm (p : 329-330)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.11.4.5 La fonction strxfrm
Voir aussi
|
compare deux chaînes de caractères selon la locale actuelle
(fonction) |
|
|
(C95)
|
compare deux chaînes larges selon la locale actuelle
(fonction) |
|
compare deux chaînes de caractères
(fonction) |
|
|
(C95)
|
transforme une chaîne large de sorte que
wcscmp
produirait le même résultat que
wcscoll
(fonction) |
|
Documentation C++
pour
strxfrm
|
|