Robert Bienert: String concat in c++

Beitrag lesen

Moin Martin!

Nein, ist es nicht. Du willst nicht wirklich sprintf in deinem Code verwenden, sondern snprintf.

Also, wenn ich ehrlich bin: Von snprintf() habe ich noch nie gehört.

In der zitierten Handbuchseite steht, dass snprintf zu ISO C99 gehört, was leider nicht alle Compiler unterstützen, während sprintf konform zu ANSI C ist, was wohl jeder Compiler versteht.

Also wo siehst du hier den kapitalen Bock?
Das sprintf halt – wie genannt – davon ausgeht, dass dein Puffer im Zweifelsfall unendlich groß ist.

Natürlich. Das ist mir geläufig und so selbstverständlich, dass ich es hier nur indirekt am Rande erwähnt habe. Das trifft auch auf die (mir besser vertraute) Windows API-FUnktion wsprintf() zu, bei der ich als Programmierer ja auch dafür sorgen muss, dass mein Puffer groß genug ist.

Wie bekommt man denn dort dieses Problem in den Griff? Wahrscheinlich genauso wenig, wie bei der Verwendung von sprintf. Ich verstehe mit wachsender Programmier-Erfahrung nicht, wie es sein kann, dass solche Funktionen wie sprintf überhaupt noch als kleinster gemeinsamer Nenner zu einem Sprachstandard gehören, obwohl es deutlich sicherere Varianten gibt. IMHO ist die Stringbehandlung in C der Hauptgrund dafür, dass tonnenweise unsicherer C-Code geschrieben wurde und immer noch wird.

Die allgemeine Sorgfaltspflicht obliegt schließlich immer dem Programmierer.

Wenn der allerdings nach eigener Aussage die ersten Gehversuche mit C macht – und vorher auch noch mit Java programmiert hat – dann haben wir als Teilnehmer dieses Forums meiner Meinung nach die Sorgfaltspflicht ihm gegenüber, korrektes, sicheres Programmieren in C beizubringen. Er soll ja nicht gleich auf einmal alle Möglichkeiten finden, sich in den Fuß zu schießen.

Viele Grüße,
Robert