C-Programm – String (char) kopieren

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

Hier einige Möglichkeiten, einen String zu kopieren … :-)

#include <stdio.h>
#include <string.h>

/* --- 1. strcpy mit Arrays --- */
char *strcpy1(char ziel[], const char quelle[]) {
    int zahl = 0;
    // solange Zeichen von der Quelle vorhanden sind,
    // also quelle[zahl] ungleich 0 ist ...
    // (letztes Zeichen eines Strings ist immer \0 -> =0 -> false)
    while(quelle[zahl]) {
    // der Buchstabe aus dem Quell-Array wird
    // an die selbe Stelle ([zahl]) im Ziel-Array geschrieben
        ziel[zahl] = quelle[zahl];
    // zahl wird um 1 erhöht (zahl=zahl+1)-> nächster Buchstabe
        zahl++;
    }
    // der neue Sting wird abgeschlossen
    ziel[zahl] = '\0';
    return(ziel);
}

/* --- 2. strcpy mit Arrays --- */
char *strcpy2(char ziel[], const char quelle[]) {
    int zahl = 0;
    // solange der Buchstabe aus dem Quell-Array an die selbe Stelle ([zahl])
    // im Ziel-Array geschrieben werden kann, also quelle[zahl] ungleich 0 ist ...
    // (letztes Zeichen eines Strings ist immer \0 -> =0 -> false)
    while((ziel[zahl] = quelle[zahl]))
    // zahl wird um 1 erhöht (zahl=zahl+1) -> nächster Buchstabe
        zahl++;
    return(ziel);
}

/* --- 3. strcpy mit Zeigern --- */
char *strcpy3(char *ziel, const char *quelle) {
    // solange der Buchstabe vom Quell-Zeiger auf die selbe Stelle
    // vom Ziel-Zeiger zeigt ...
    // (letztes Zeichen eines Strings ist immer \0 -> =0 -> false)
    while((*ziel = *quelle)) {
    // Zeiger um einen erhöhen -> nächste Speicherstelle -> nächster Buchstabe 
        ziel++;
        quelle++;
    }
    return(ziel);
}

/* --- 4. strcpy mit Zeigern --- */
char *strcpy4(char *ziel, const char *quelle) {
    // solange der Buchstabe vom Quell-Zeiger auf die selbe Stelle
    // vom Ziel-Zeiger zeigt, so werden diese jedesmal um 1 erhöht ...
    // (letztes Zeichen eines Strings ist immer \0 -> =0 -> false)
    while((*ziel++ = *quelle++));
    return(ziel);
}


int main(void) {
    char *gruss = "Hallo Welt";
    char gruss1[100];
    char gruss2[100];
    char gruss3[100];
    char gruss4[100];
    char gruss5[100];

/* --- 1. strcpy mit Arrays --- */
    strcpy1(gruss1, gruss);
    printf("%s\n", gruss1);
/* --- 2. strcpy mit Arrays --- */
    strcpy2(gruss2, gruss);
    printf("%s\n", gruss2);
/* --- 3. strcpy mit Zeigern --- */
    strcpy3(gruss3, gruss);
    printf("%s\n", gruss3);
/* --- 4. strcpy mit Zeigern --- */
    strcpy4(gruss4, gruss);
    printf("%s\n", gruss4);
/* --- 5. strcpy -> <string.h> --- */
    strcpy(gruss5, gruss);
    printf("%s\n", gruss5);

    return(0);
}

Veröffentlicht von

voku

Lars Moelleken | Ich bin root, ich darf das!