strxfrm, wcsxfrm

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu string.h - Index


Header-Datei

string.h

Kategorie

Routinen für Speicher- und String-Bearbeitung

Prototyp

size_t strxfrm(char *target, const char *source, size_t n);

size_t wcsxfrm(wchar_t *target, const wchar_t *source, size_t n);

Beschreibung

Transformiert einen Teil eines Strings entsprechend der angegebenen Sortierreihenfolge.

strxfrm transformiert maximal n Zeichen des Strings, auf den source zeigt, und speichert sie im String target. Die Transformation erfolgt so, dass ein Aufruf der Funktion strcmp mit den Ergebnis-String Werte liefert, die den Rückgabewerten der Funktion strcoll entspricht.

Es werden maximal n Zeichen einschließlich des abschließenden Nullzeichens nach target kopiert.

strxfrm transformiert einen String entsprechend der Kategorie LC_COLLATE des aktuellen Gebietsschemas in einen speziellen String. Der resultierende String kann Byte für Byte mit einem anderen String des gleichen Typs verglichen werden, um eine im aktuellen Gebietsschemas korrekte Sortierreihenfolge zu erreichen. Diese speziellen Strings, die als Schlüssel oder in Token aufgeteilte Strings betrachtet werden können, sind mit denen anderer Gebietsschemata nicht kompatibel.

Die Token dieser Strings ergeben sich aus von strcoll verwendeten Sortiergewichtungen der Sortiertabellen des aktuellen Gebietsschemas.

Die Transformation endet erst, wenn alle Sortierebenen für den String bearbeitet wurden, oder die Länge des Token-Strings dem Wert des Parameters maxlen entspricht.

Alle redundanten Token werden aus dem Token-Satz jeder Ebene entfernt.

Der Puffer, auf den dest zeigt, muss groß genug sein, um den transformierten Token-String aufnehmen zu können. Die Größe dieses Puffers hängt ab von der Länge des Ausgangs-Strings, der Anzahl der Sortierebenen, der Regeln für jede Ebene und davon, ob der String spezielle Zeichen enthält. Solche speziellen Zeichen könnten eine gesonderte Behandlung erfordern, die mehr Speicherplatz nötig macht. Beispielweise wird die französische Ligatur "œ" in manchen Gebietsschemata in zwei Zeichen mit unterschiedlicher Sortiergewichtung aufgeteilt. Teil-Strings mit Ersetzungen führen ebenfalls zu einem höheren Speicheraufwand.

Es gibt keine Möglichkeit, die erforderliche Puffergröße exakt zu bestimmen, jedoch ist mindestens die sich aus (Sortierebenen * String-Länge) ergebende Größe erforderlich.

Rückgabewert

Die Anzahl der kopierten Zeichen, ohne das abschließende Nullzeichen. Ist der Rückgabewert größer oder gleich n, ist der Inhalt von target unbestimmt.

Beispiel



 #include <stdio.h>
 #include <string.h>
 #include <alloc.h>
 int main(void)
 {
    char *target;
    char *source = "Frank Borland";
    int length;
    /* Speicher für String target reservieren */
    dest = (char *) calloc(80, sizeof(char));
    /* source nach target kopieren und dessen Länge ermitteln */
    length = strxfrm(target, source, 80);
    /* Ergebnisse ausgeben */
    printf("%s has the length %d\n", target, length);
    return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

strxfrm

+

+

+

+

wcsxfrm

+

+

+