Namespaces
Variants

wcsxfrm

From 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 ) ;
(jusqu'à C99)
(depuis C95)
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 zéro 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 wcscmp donne le même résultat que la comparaison des chaînes originales avec wcscoll , 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 fin, et la longueur de la chaîne transformée complète est renvoyée, à l'exclusion du caractère nul de fin.

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 + wcsxfrm ( 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 large ou le même ensemble de chaînes larges, car il est plus efficace d'utiliser wcsxfrm pour transformer toutes les chaînes une seule fois, puis de 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 large terminée par un caractère nul à transformer
count - nombre maximum de caractères à produire

Valeur de retour

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

Exemple

#include <stdio.h>
#include <wchar.h>
#include <locale.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 C11 (ISO/CEI 9899:2011) :
  • 7.29.4.4.4 La fonction wcsxfrm (p: 434-435)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.24.4.4.4 La fonction wcsxfrm (p: 380-381)

Voir aussi

compare deux chaînes selon les paramètres régionaux actuels
(fonction)
(C95)
compare deux chaînes larges selon les paramètres régionaux actuels
(fonction)
(C95)
compare deux chaînes larges
(fonction)
transforme une chaîne pour que strcmp produise le même résultat que strcoll
(fonction)
Documentation C++ pour wcsxfrm