Da unsere neuen Azubis hier am ZIH derzeit C lernen müssen und ich das große Glück habe diesen Job zu übernehmen, konnte ich wieder einmal feststellen, das C absolut Einsteiger ungeeignet ist. Für jemanden der noch nie programmiert hat ist es schwer genug sich reinzufitzen aber C zwingt einen fast von Anfang an sich mit Zeigern rumzuschlagen.
Und wenn man dann ein Verständnissproblem mit Funktionen hat und folgendes Konstrukt erdenkt um eine Zeichenkette in eine Variable einzulesen, kommt man schon ins Zweifeln.
scanf( "%s", strcpy( variable, "%s" )
Der dahinterliegende Gedanke ist mir zwar nicht nachvollziehbar, aber das so etwas auch noch funktioniert, ist erschreckender. Vor allem wenn man dem wehrlosen Anfänger dann erklären muss warum das was er da schreibt falsch, bzw. schlechter Stil ist.
Für alle die jetzt nicht auf Anhieb sehen warum es geht, die Manpage zu strcpy liefert die Antwort. Zuerst wird das strcpy ausgeführt und setzt “%s” in die variable und liefert den Zeiger auf die Variable zurück, an die dort angegebene Speicheradresse schreibt scanf nunmehr den eingelesenen Wert.