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 - Teil einer Zeichenkette kopieren

&pagelevel(4)&pagelevel

Definition

#include <string.h>

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

strfill kopiert maximal n Zeichen aus der Zeichenkette s2 in die Zeichenkette s1.

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.:

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

    • Enthält s1 weniger als n Zeichen, 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 Hinweise).

  2. s2 enthält weniger als n Zeichen

    Zusätzlich zu den kopierten Zeichen aus s2 werden noch soviele 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 NULL-Zeiger übergeben

    Es werden (n - strlen(s1)) Leerzeichen an die Zeichenkette s1 angehängt. Ergibt diese Subtraktion ein negatives Ergebnis oder 0, d.h. ist die Anzahl der Zeichen in s1 größer oder gleich n, 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