Namespaces
Variants

wcsxfrm

Von de.cppreference.net
< c | string | wide
 
 
 
 
Definiert in Header <wchar.h>
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );
(seit C95)
(bis C99)
size_t wcsxfrm( wchar_t* restrict dest, const wchar_t* restrict src, size_t count );
(seit C99)

Wandelt die nullterminierte breite Zeichenkette, auf die src zeigt, in eine implementationsdefinierte Form um, so dass der Vergleich zweier umgewandelter Zeichenketten mit wcscmp dasselbe Ergebnis liefert wie der Vergleich der ursprünglichen Zeichenketten mit wcscoll in der aktuellen C-Locale.

Die ersten count Zeichen der umgewandelten Zeichenkette werden in das Ziel geschrieben, einschließlich des abschließenden Nullzeichens, und die Länge der vollständigen umgewandelten Zeichenkette wird zurückgegeben, ohne das abschließende Nullzeichen.

Wenn count 0 ist, dann darf dest ein Nullzeiger sein.

Hinweise

Die korrekte Länge des Puffers, der die gesamte umgewandelte Zeichenkette aufnehmen kann, ist 1 + wcsxfrm(NULL, src, 0)

Diese Funktion wird verwendet, wenn mehrere locale-abhängige Vergleiche mit derselben breiten Zeichenkette oder Menge breiter Zeichenketten durchgeführt werden, da es effizienter ist, wcsxfrm zu verwenden, um alle Zeichenketten nur einmal umzuwandeln und anschließend die umgewandelten breiten Zeichenketten mit wcscmp zu vergleichen.

Parameter

dest - Zeiger auf das erste Element einer nullterminierten breiten Zeichenkette, in die die umgewandelte Zeichenkette geschrieben werden soll
src - Zeiger auf die nullterminierte breite Zeichenkette, die umgewandelt werden soll
count - maximale Anzahl der auszugebenden Zeichen

Rückgabewert

Die Länge der umgewandelten breiten Zeichenkette, ohne das abschließende Nullzeichen.

Beispiel

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

Ausgabe:

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

Referenzen

  • C23-Norm (ISO/IEC 9899:2024):
  • 7.29.4.4.4 Die Funktion wcsxfrm (S.: TBD)
  • C17-Norm (ISO/IEC 9899:2018):
  • 7.29.4.4.4 Die Funktion wcsxfrm (S.: TBD)
  • C11-Norm (ISO/IEC 9899:2011):
  • 7.29.4.4.4 Die Funktion wcsxfrm (S.: 434-435)
  • C99-Norm (ISO/IEC 9899:1999):
  • 7.29.4.4.4 Die Funktion wcsxfrm (S.: 380-381)

Siehe auch

vergleicht zwei Zeichenketten gemäß der aktuellen Locale
(Funktion)
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale
(Funktion)
(C95)
vergleicht zwei breite Zeichenketten
(Funktion)
wandelt eine Zeichenkette so um, dass strcmp das gleiche Ergebnis wie strcoll liefert
(Funktion)
C++-Dokumentation für wcsxfrm