Dakons blog

Erstellt: 18. 12. 2008, 23:48
Geändert: 18. 12. 2008, 23:52

Bug des Tages: strncpy()

Tags:

Vor ein paar Tagen sind wir über den kreativen Einsatz von strncpy() gefallen, der in Zusammenhang mit der Verschlimmbesserung der C-Funktionen in M$ Visual Studio 2005 zu einer Exception geführt hat. Aber der Reihe nach: strncpy(ziel, quelle, n) kopiert maximal n Zeichen von der Quelle zum Ziel. Der Einsatzzweck ist eigentlich recht klar: man will damit in der Regel verhindern, dass man über das Ende des Ziels hinausschreibt. Gefunden haben wir jedoch das hier:

strncpy(ziel, quelle, strlen(quelle));

Die Quelle war an dieser Stelle ein String der Länge 0 ("", nicht NULL). Aus irgendeinem Grund gefällt es VS2005 gar nicht wenn es nichts zu tun hat an dieser Stelle. Andererseits ist der Aufruf trotzdem Unsinn, denn am Ende des Eingangswertes stoppt strncpy() sowieso. Richtig wäre hier folgendes gewesen:

strncpy(ziel, quelle, sizeof(ziel));
Anbieterkennzeichnung