strxfrm
|
Definiert im Header
<string.h>
|
||
| (bis C99) | ||
| (seit C99) | ||
Transformiert die nullterminierte Byte-Zeichenkette, auf die
src
zeigt, in die implementationsdefinierte Form, sodass der Vergleich zweier transformierter Zeichenketten mit
strcmp
das gleiche Ergebnis liefert wie der Vergleich der ursprünglichen Zeichenketten mit
strcoll
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.
Das Verhalten ist undefiniert, wenn das
dest
-Array nicht groß genug ist. Das Verhalten ist undefiniert, wenn sich
dest
und
src
überlappen.
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 + strxfrm ( NULL , src, 0 )
Diese Funktion wird verwendet, wenn mehrere gebietsschemaabhängige Vergleiche mit demselben String oder derselben Gruppe von Strings durchgeführt werden, da es effizienter ist,
strxfrm
zu verwenden, um alle Strings nur einmal zu transformieren und anschließend die transformierten Strings mit
strcmp
zu vergleichen.
Parameter
| dest | - | Zeiger auf das erste Element des Arrays, in das die transformierte Zeichenkette geschrieben wird |
| src | - | Zeiger auf das erste Zeichen einer nullterminierten Byte-Zeichenkette, die transformiert werden soll |
| count | - | maximale Anzahl der zu schreibenden Zeichen |
Rückgabewert
Die Länge des transformierten Strings, ohne das abschließende Nullzeichen.
Beispiel
#include <stdio.h> #include <string.h> #include <locale.h> int main(void) { setlocale(LC_COLLATE, "cs_CZ.iso88592"); const char *in1 = "hrnec"; char out1[1+strxfrm(NULL, in1, 0)]; strxfrm(out1, in1, sizeof out1); const char *in2 = "chrt"; char out2[1+strxfrm(NULL, in2, 0)]; strxfrm(out2, in2, sizeof out2); printf("In the Czech locale: "); if(strcmp(out1, out2) < 0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); printf("In lexicographical comparison: "); if(strcmp(in1, in2)<0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); }
Mögliche Ausgabe:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.24.4.5 Die strxfrm-Funktion (S: 267)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.24.4.5 Die strxfrm-Funktion (S: 366-367)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.21.4.5 Die strxfrm-Funktion (S: 329-330)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.11.4.5 Die strxfrm-Funktion
Siehe auch
|
vergleicht zwei Zeichenketten gemäß der aktuellen Locale
(Funktion) |
|
|
(C95)
|
vergleicht zwei Wide-Strings gemäß der aktuellen Locale
(Funktion) |
|
vergleicht zwei Zeichenketten
(Funktion) |
|
|
(C95)
|
transformiert einen Wide-String, sodass
wcscmp
das gleiche Ergebnis liefern würde wie
wcscoll
(Funktion) |
|
C++-Dokumentation
für
strxfrm
|
|