Namespaces
Variants

wcsxfrm

De fr.cppreference.net
< c | string | wide
 
 
 
 
Défini dans l'en-tête <wchar.h>
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );
(depuis C95)
(jusqu'à C99)
size_t wcsxfrm( wchar_t* restrict dest, const wchar_t* restrict src, size_t count );
(depuis C99)

Transforme la chaîne large terminée par un caractère nul pointée par src en une forme définie par l'implémentation de telle sorte que comparer deux chaînes transformées avec wcscmp donne le même résultat que comparer les chaînes originales avec wcscoll, dans la locale C actuelle.

Les count caractères de la chaîne transformée sont écrits dans destination, y compris le caractère nul de terminaison, et la longueur de la chaîne transformée complète est retournée, sans compter le caractère nul de terminaison.

Si count est 0, alors dest est autorisé à être un pointeur nul.

Notes

La longueur correcte du tampon qui peut recevoir la chaîne transformée entière est 1 + wcsxfrm(NULL, src, 0)

Cette fonction est utilisée lors de la réalisation de plusieurs comparaisons dépendant de la locale utilisant la même chaîne large ou un ensemble de chaînes larges, car il est plus efficace d'utiliser wcsxfrm pour transformer toutes les chaînes juste une fois, et ensuite comparer les chaînes larges transformées avec wcscmp.

Paramètres

dest - pointeur vers le premier élément d'une chaîne large terminée par un caractère nul pour écrire la chaîne transformée
src - pointeur vers la chaîne de caractères larges terminée par un caractère nul à transformer
count - nombre maximal de caractères à produire en sortie

Valeur retournée

La longueur de la chaîne large transformée, sans compter le caractère nul de terminaison.

Exemple

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

Sortie :

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

Références

  • Norme C23 (ISO/IEC 9899:2024) :
  • 7.29.4.4.4 La fonction wcsxfrm (p : TBD)
  • Norme C17 (ISO/IEC 9899:2018) :
  • 7.29.4.4.4 La fonction wcsxfrm (p : TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.29.4.4.4 La fonction wcsxfrm (p : 434-435)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.29.4.4.4 La fonction wcsxfrm (p : 380-381)

Voir aussi

compare deux chaînes en fonction de la locale actuelle
(fonction)
compare deux chaînes larges en fonction de la locale actuelle
(fonction)
(C95)
compare deux chaînes larges
(fonction)
transforme une chaîne de sorte que strcmp produise le même résultat que strcoll
(fonction)
Documentation C++ pour wcsxfrm