Zitat von
destrukt
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.
Lesezeichen