Hallo Robert,
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.
Ach so, also ist snprintf() noch etwas ziemlich neues. Kein Wunder, dass ich es nicht kenne.
auf die [...] 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?
Ganz einfach durch eine worst-case-Abschätzung. Wenn ich Zahlenwerte mit xxprintf() ausgebe, sollte ich als Autor des Programmcodes wissen, in welchen Grenzen diese Zahlen liegen können - abgehakt. Im Fall von Strings ergibt sich die maximale Länge oft auch aus Beschränkungen, die im restlichen Programm irgendwo abgeprüft werden; in anderen Fällen gibt es strlen() oder die Möglichkeit, %s mit einer Längenangabe zu versehen.
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.
Hmm. Ich bin da wohl aus anderem Holz geschnitzt. Ich liebe die Freiheit, die C mir bietet, auch wenn sie gewisse Risiken birgt. Oft geht mir sogar diese Freiheit nicht weit genug, so dass ich mich über Beschränkungen der Sprache an sich oder eines bestimmten Compilers ärgere (Stichwort Typkompatibilität). Vielleicht liegt's daran, dass ich jahrelang Assembler programmiert habe und da erst die _wirkliche_ Programmierer-Freiheit kennen und lieben gelernt habe?
Die allgemeine Sorgfaltspflicht obliegt schließlich immer dem Programmierer.
Wenn der allerdings nach eigener Aussage die ersten Gehversuche mit C macht ...
Oh, ich bitte um Entschuldigung. Das hatte ich tatsächlich schon wieder vergessen.
Noch schlimmer: Er benutzt nicht C, sondern C++, das ich sonst normalerweise meide wie der Teufel das Weihwasser, weil es die (im Gegensatz zu strengeren Sprachen wie z.B. Pascal) schon relativ laxen Syntaxregeln von C noch weiter aufweicht und mehr noch als C zu schlampigem Code verführt.
Wobei man in C durchaus sehr sauberen und übersichtlichen Programmcode schreiben kann, wenn man sich ein wenig am Riemen reißt.
Schönen Abend noch,
Martin
why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
(wahsaga, http://forum.de.selfhtml.org/?t=110904&m=697006, nicht archiviert)
Schon Urlaubspläne?