Namespaces
Variants

wcsxfrm

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

Transformiert die nullterminierte Breitzeichen-Zeichenkette, auf die src zeigt, in die implementationsdefinierte Form, sodass der Vergleich zweier transformierter Zeichenketten mit wcscmp das gleiche Ergebnis liefert wie der Vergleich der ursprünglichen Zeichenketten mit wcscoll , in der aktuellen C-Locale.

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

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

Inhaltsverzeichnis

Hinweise

Die korrekte Länge des Puffers, die den gesamten transformierten String aufnehmen kann, ist 1 + wcsxfrm ( NULL , src, 0 )

Diese Funktion wird verwendet, wenn mehrere gebietsschemaabhängige Vergleiche mit demselben Breitzeichen-String oder Satz von Breitzeichen-Strings durchgeführt werden, da es effizienter ist, wcsxfrm zu verwenden, um alle Strings nur einmal zu transformieren und anschließend die transformierten Breitzeichen-Strings mit wcscmp zu vergleichen.

Parameter

dest - Zeiger auf das erste Element einer nullterminierten Breitzeichen-Zeichenkette, in die die transformierte Zeichenkette geschrieben werden soll
src - Zeiger auf die zu transformierende nullterminierte Breitzeichen-Zeichenkette
count - maximale Anzahl der auszugebenden Zeichen

Rückgabewert

Die Länge der transformierten Breitzeichenkette, ohne den abschließenden Nullterminator.

Beispiel

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

Ausgabe:

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

Referenzen

  • C11-Standard (ISO/IEC 9899:2011):
  • 7.29.4.4.4 Die wcsxfrm-Funktion (S. 434-435)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.24.4.4.4 Die wcsxfrm-Funktion (S. 380-381)

Siehe auch

vergleicht zwei Zeichenketten gemäß dem aktuellen Gebietsschema
(Funktion)
(C95)
vergleicht zwei breite Zeichenketten gemäß dem aktuellen Gebietsschema
(Funktion)
(C95)
vergleicht zwei breite Zeichenketten
(Funktion)
transformiert eine Zeichenkette, sodass strcmp das gleiche Ergebnis wie strcoll liefern würde
(Funktion)
C++-Dokumentation für wcsxfrm