Namespaces
Variants

strxfrm

From cppreference.net
< c ‎ | string ‎ | byte
Défini dans l'en-tête <string.h>
size_t strxfrm ( char * dest, const char * src, size_t count ) ;
(jusqu'à C99)
size_t strxfrm ( char * restrict dest, const char * restrict src, size_t count ) ;
(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