Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

strfill - Teilzeichenkette kopieren (BS2000)

&pagelevel(4)&pagelevel

Definition

#include <string.h>

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

Beschreibung

strfill() kopiert maximal n Zeichen aus der Zeichenkette s2 in den Speicherbereich, auf den s1 zeigt.

Je nach Länge bzw. Inhalt der Zeichenketten s1, s2 und der Anzahl n wird folgendermaßen kopiert:

  1. Unabhängig von der Länge der Zeichenkette s1 werden (mit Ausnahme von Fall 5.) immer n Zeichen nach s1 kopiert; d.h.:

    • Wenn s1 mehr als n Zeichen enthält, bleiben die restlichen rechten Zeichen in s1 erhalten.

    • Wenn s1 weniger als n Zeichen enthält, wird s1 bis zur Länge n verlängert. In diesem Fall ist s1 nach dem Kopiervorgang nicht automatisch mit einem Nullbyte abgeschlossen (siehe auch Hinweis).

  2. s2 enthält weniger als n Zeichen:

    Zusätzlich zu den kopierten Zeichen aus s2 werden noch so viele Leerzeichen hinzugefügt, bis n Zeichen geschrieben wurden.

  3. s2 enthält mehr als n Zeichen:

    Es werden nur die führenden n Zeichen aus s2 kopiert.

  4. s2 ist leer:

    s1 wird mit n Leerzeichen aufgefüllt.

  5. s2 wird als Nullzeiger übergeben:

    Es werden (n - strlen(s1)) Leerzeichen an die Zeichenkette s1 angehängt. Wenn diese Subtraktion ein negatives Ergebnis oder 0 ergibt, d.h. die Anzahl der Zeichen in s1 größer oder gleich n ist, bleibt der Inhalt von s1 unverändert.

Returnwert

Zeiger auf die Ergebniszeichenkette s1.

Hinweise

Als Argumente werden Zeichenketten erwartet, die mit dem Nullbyte (\0) abgeschlossen sind.

strfill() überprüft nicht, ob s1 groß genug für das Ergebnis ist und schließt die Ergebniszeichenkette nicht automatisch mit dem Nullbyte (\0) ab! Um kein unvorhergesehenes Ergebnis zu erhalten, sollten Sie nach jedem Aufruf von strfill() die Zeichenkette s1 explizit mit dem Nullbyte abschließen (siehe auch Beispiel).

Bei sich überlappenden Speicherbereichen ist das Verhalten undefiniert.

Beispiel

#include <stdio.h>
#include <string.h>
int main(void)
{
    size_t n; 
    char s1[10];
    char s2[10];
    printf("Bitte 2 Zeichenketten eingeben!\n");
    scanf("%s %s", s1, s2);
    printf("wie viele Zeichen kopieren?\n");
    scanf("%d", &n);
    strfill(s1, s2, n);
    /* strfill(s1, NULL, n);       Beispiel für Übergabe von s2 als
                                   NULL-Zeiger */
    *(s1 + n) = '\0';  /*Ergebniszeichenkette mit Nullbyte abschließen*/
    printf("s1 nach strfill: %s\n", s1);
    printf("Aktuelle Laenge von s1: %d\n", strlen(s1));
    return 0;
}

Siehe auch

strncpy().