Anzeige:
Ergebnis 1 bis 5 von 5

Thema: C Frage zu Code schnippsel

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von destrukt Beitrag anzeigen
    kann mir vielleicht jemand helfen diesen Code zu verstehn
    Der Code kopiert eine Zeichenkette -- genau wie strcpy() -- gibt aber im Gegensatz zu strcpy() die Länge der kopierten Zeichenkette, also strlen(), zurück.

    Er ist ein wenig "historisch" geschrieben [1], und ist in seiner Funktionalität (aber nicht in seinem Laufzeitverhalten) identisch mit:
    Code:
    unsigned int str_copy(char *out,const char *in) {
      char *s = out;
      for (;;) {
        if (!(*s=*in)) break; ++s; ++in;
      }
      return s-out;
    }
    oder
    Code:
    unsigned int str_copy(char *out,const char *in) {
      char *s = out;
      while ( (*s=*in) != '\0' ) {
        ++s; ++in;
      }
      return s-out;
    }
    oder eben
    Code:
    unsigned int str_copy(char *out,const char *in) {
      return strlen( strcpy( out, in ) );
    }
    und ob es Sinnmacht break in einer if Bedinung zu verwenden.
    Warum sollte das keinen Sinn ergeben? Das "break" bezieht sich doch auf die "for"-Schleife (und ist keinesfalls in der "if"-Bedingung platziert, sondern in dem Code danach).

    [1] Durch die Anweisung "register" an den Compiler, nach Möglichkeit Prozessorregister für die Variablen zu verwenden, und durch die vierfache Wiederholung der inneren Anweisung wurde versucht, das Laufzeitverhalten zu verbessern. Zu uralten Zeiten hat das auch noch was gebracht, wenn diese Funktion sehr häufig aufgerufen worden ist, heutzutage ist das für Anfänger verwirrend, aber nicht mehr hilfreich, zumal die C-Compiler heutzutage selber Code-Optimierungen durchführen.
    Geändert von sommerfee (02-02-2013 um 09:26 Uhr) Grund: Historische Abhandlung hinzugefügt

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •