Namespaces
Variants

strxfrm

From cppreference.net
< c ‎ | string ‎ | byte
Definiert im Header <string.h>
size_t strxfrm ( char * dest, const char * src, size_t count ) ;
(bis C99)
size_t strxfrm ( char * restrict dest, const char * restrict src, size_t count ) ;
(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