wcsxfrm
| Definiert in Header <wchar.h> |
||
| (bis C99) (seit C95) |
||
| (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) | |
| (C95) |
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale (Funktion) |
| (C95) |
vergleicht zwei breite Zeichenketten (Funktion) |
| transformiert einen String so, dass strcmp dasselbe Ergebnis wie strcoll liefert (Funktion) | |
| C++ Dokumentation für wcsxfrm
| |