Namensräume
Varianten
Aktionen

strxfrm

Von cppreference.com
< c‎ | string‎ | byte
Definiert in Header <string.h>
size_t strxfrm( char          *ziel, const char          *quelle, size_t anzahl );
(bis C99)
size_t strxfrm( char *restrict ziel, const char *restrict quelle, size_t anzahl );
(seit C99)

Transformiert den nullterminierten Byte-String, auf den quelle zeigt, in die implementierungsdefinierte Form, sodass das Vergleichen zweier transformierter Strings mit strcmp dasselbe Ergebnis liefert wie das Vergleichen der Original-Strings mit strcoll, in der aktuellen C-Locale.

Die ersten anzahl 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, ausschließlich des abschließenden Nullzeichens.

Das Verhalten ist undefiniert, wenn das ziel-Array nicht groß genug ist. Das Verhalten ist undefiniert, wenn ziel und quelle überlappen.

Wenn anzahl 0 ist, dann darf ziel ein Nullzeiger sein.

Inhalt

[bearbeiten] Hinweise

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

Diese Funktion wird verwendet, wenn mehrere locale-abhängige Vergleiche mit demselben oder einem Satz 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.

[bearbeiten] Parameter

dest - Zeiger auf das erste Element des Arrays, in das der transformierte String geschrieben wird
src - Zeiger auf das erste Zeichen eines nullterminierten Byte-Strings, der transformiert werden soll
zählt - maximale Anzahl von zu schreibenden Zeichen

[bearbeiten] Rückgabewert

Die Länge des transformierten Strings, nicht einschließlich des abschließenden Nullzeichens.

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

[bearbeiten] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.24.4.5 Die Funktion strxfrm (S. 267)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.24.4.5 Die Funktion strxfrm (S. 366-367)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.21.4.5 Die Funktion strxfrm (S. 329-330)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.11.4.5 Die Funktion strxfrm

[bearbeiten] Siehe auch

vergleicht zwei Strings gemäß der aktuellen Locale
(Funktion) [bearbeiten]
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale
(Funktion) [bearbeiten]
vergleicht zwei Strings
(Funktion) [bearbeiten]
transformiert einen Wide-String, sodass wcscmp das gleiche Ergebnis wie wcscoll liefert
(Funktion) [bearbeiten]
C++ Dokumentation für strxfrm