Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

strxfrm - Transformieren einer Zeichenkette

&pagelevel(4)&pagelevel

Definition

#include <string.h>

size_t strxfrm(char *s1, const char *s2, size_t n);

strxfrm transformiert die Zeichen der Zeichenkette s2, so dass die lexikalische Reihenfolge jedes Zeichens entsprechend der LC_COLLATE-Kategorie der aktuellen Lokalität interpretiert wird. Anschließend werden maximal n transformierte Zeichen (inklusive des abschließenden Nullbytes) in die Zeichenkette s1 kopiert.
Hat n den Wert 0, kann die Ergebniszeichenkette s1 ein NULL-Zeiger sein.

Ein Vergleich von zwei mit strxfrm transformierten Zeichenketten mit der Funktion strcmp liefert dann das gleiche Ergebnis, wie ein Vergleich mit der Funktion strcoll, angewandt auf dieselben originalen Zeichenketten.

Returnwert

Länge der transformierten Zeichenkette (exklusive des abschließenden Nullbytes).

Hinweise

Als Argument s2 wird eine Zeichenkette erwartet, die mit dem Nullbyte abgeschlossen ist.

Die Zeichenkette s2 wird durch strxfrm nicht verändert. Die Transformation wird in einem Arbeitsbereich durchgeführt.

Falls der Returnwert größer oder gleich n ist, ist der Inhalt der Zeichenkette s1 unbestimmbar, da kein Nullbyte geschrieben wurde.

Ist in der aktuellen Lokalität einem der Zeichen in der Zeichenkette s2 der sedezimale Wert 0 zugeordnet, schließt dieses Zeichen als Nullbyte die transformierte Zeichenkette ab (vgl. "Benutzerspezifische Lokalitäten").

Bei sich überlappenden Speicherbereichen ist das Verhalten undefiniert.

Das Lokalitätskonzept ist ausführlich im Kapitel "Lokalität“ beschrieben.

Beispiel

#include <stdio.h>
#include <string.h>
#include <locale.h>
int main(void)
{
  char alpha2[11];
  char num2[11];
  int comp1;
  int comp2;
  int comp3;
  size_t i = 11;
  char *alpha1 = "ABCDEFGHIJ";
  char *num1 = "0123456789";
  setlocale(LC_COLLATE, "ANNE");      /* Aktivieren der benutzerspezifischen
                                          Lokalität, in der die Ziffern einen
                                          niedrigeren Sortierwert haben als
                                          die Buchstaben */
  comp1 = strcoll(alpha1, num1);      /* Vergleich der originären Zeichen- */
  if(comp1 > 0)                       /* ketten mit strcoll */
     printf ("alpha1 groesser num1\n");
  else printf("Fehler\n");
  comp2 = strcmp(alpha1, num1);       /* Vergleich der originären Zeichen- */
  if(comp2 < 0)                       /* ketten mit strcmp */
     printf ("alpha1 kleiner num1\n");
  else printf("Fehler\n");
  strxfrm(num2, num1, i);             /* Transfomieren mit strxfrm */
  strxfrm(alpha2, alpha1, i);
  comp3 = strcmp(alpha2, num2);       /* Vergleich der transformierten */
  if(comp3 > 0)                       /* Ergebniszeichenketten mit strcmp */
     printf ("alpha2 groesser num2\n");
  else printf("Fehler\n");
return 0;
}

Siehe auch   setlocale, strcoll, strcmp