String kopieren



  • Aufgabe:

    Schreiben Sie eine Funktion strcopy(char* ziel, const char* quelle). Sie soll
    den Rückgabetyp void haben und den Inhalt des Strings quelle in den String ziel kopie-
    ren, wobei der vorherige Inhalt von ziel dabei überschrieben wird. Es sei vorausgesetzt,
    dass ziel ausreichend groß ist, um quelle aufzunehmen.

    Musterlösung:

    // Die Funktion entspricht der Funktion strcpy() der
    // C++-Standardbibliothek.
    #include <cassert>
    #include <cstring>
    #include <iostream>
    
    void strcopy(char* ziel, const char* quelle) {
      // kopiert den Inhalt von quelle in den String ziel (und
      // überschreibt den vorherigen Inhalt von ziel dabei).
      while ((*ziel++ = *quelle++))
        ;
    }
    
    int main() {
      const char* const original = "Alles Gute!";
      std::cout << original << '\n';
      char kopie[80];
      assert(sizeof kopie > strlen(original));
      strcopy(kopie, original);
      std::cout << kopie << '\n';
    }
    

    Hi, kann mir jemand helfen diese Lösung nachzuvollziehen?
    Vielleicht kann jemand z.B. die Zeile 18 kurz erläutern.
    Was genau macht assert(sizeof kopie > strlen(original));?



  • @theAnfänger77 sagte in String kopieren:

    assert(sizeof kopie > strlen(original));?

    Das ist doch schon fast ein richtiger Satz. Was würdest du denn vermuten? Was hast du herausgefunden? Was daran verstehst du nicht?



  • @theAnfänger77 sagte in String kopieren:

    while ((*ziel++ = *quelle++));

    das ist aus kernighan/ritchies "the c programming language" und hat schon milionen c-interessierte erschüttert, warum die schleife überhaupt abbricht.



  • @Bushmaster sagte in String kopieren:

    warum die schleife überhaupt abbricht.

    Weil das Ergebnis einer Zuweisung der zugewiesene Wert und irgendwann ein '\0' also 0 also false ist?



  • @Swordfish sagte in String kopieren:

    @Bushmaster sagte in String kopieren:

    warum die schleife überhaupt abbricht.

    Weil das Ergebnis einer Zuweisung der zugewiesene Wert und irgendwann ein '\0' also 0 also false ist?

    dass ne zuweisung zugleich einen wert hat, ist eine der hürden beim verstehen von c. das hilft zwar den code kurz zu halten, aber kann einsteiger verwirren.



  • Ah ok. Mein Denkfehler war, dass ich dachte die Größe von "ziel" soll der Größe von "quelle" angepasst werden. Aber das Programm soll einfach abbrechen wenn der String mehr als 81 Zeichen hat.


Anmelden zum Antworten