Namensräume
Varianten
Aktionen

wcsxfrm

Von cppreference.com
< 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 Wide-String, auf die von src gezeigt wird, in die implementierungsdefinierte Form, so dass der Vergleich zweier transformierter Strings mit wcscmp das gleiche Ergebnis liefert wie der Vergleich der ursprünglichen Strings 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 gleich 0 ist, darf dest ein Nullzeiger sein.

Inhalt

[bearbeiten] Anmerkungen

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

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

[bearbeiten] Parameter

dest - Zeiger auf das erste Element eines Wide-Nullterminierten Strings, in den der transformierte String geschrieben werden soll
src - Zeiger auf den nullterminierten Wide-Character-String, der transformiert werden soll
zählt - maximale Anzahl der auszugebenden Zeichen

[bearbeiten] Rückgabewert

Die Länge des transformierten Wide-Strings, ohne das abschließende Nullzeichen.

[bearbeiten] 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

vergleicht zwei Strings gemäß der aktuellen Locale
(Funktion) [bearbeiten]
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale
(Funktion) [bearbeiten]
(C95)
vergleicht zwei breite Zeichenketten
(Funktion) [bearbeiten]
transformiert einen String so, dass strcmp dasselbe Ergebnis wie strcoll liefert
(Funktion) [bearbeiten]
C++ Dokumentation für wcsxfrm