Geh mal zu einer Embedded-Messe, wo ein großer Aufsteller steht "finde den Bug in folgender C-Funktion". Dann folgt meist eine simple Implementation einer Stringumkehr oder einer RLE-Decodierung. Das Ding funktioniert meistens sogar.
Das Teil strotzt meist vor Fehlern, die üblichen Kandidaten sind:
- malloc() darf NULL zurückgeben
- scanf(), printf() dürfen fehlschlagen
- sscanf() darf ungültig sein, wenn der Formatstring nicht passt
- sprintf() ist ungültig, wenn Quelle und Ziel überlappen
- strcpy und Freunde ohne 'n'
- off-by-one-Fehler (Array ab eins, For-Schleife eins zu groß, ...)
- falsche Variable zurückgegeben (gerne auch die Eingabe)
Das sind böse Dinger. Jeder, der C programmiert, sollte mindestens diese kennen.