Neben den anderen gut erläuterten Antworten mit allen Nebenanliegen möchte ich eine präzise und präzise Antwort auf die gestellte Frage geben.
Warum ist printf
ein einzelnes Argument (ohne Konvertierungsspezifizierer) veraltet?
Ein printf
Funktionsaufruf mit einem einzigen Argumente wird im Allgemeinen nicht als veraltet und hat auch keine Schwachstellen , wenn sie ordnungsgemäß verwendet wird, wie Sie immer kodieren sollen.
C Benutzer auf der ganzen Welt, vom Statusanfänger bis zum Statusexperten printf
, geben auf diese Weise eine einfache Textphrase als Ausgabe an die Konsole.
Außerdem muss jemand unterscheiden, ob dieses einzige Argument ein Zeichenfolgenliteral oder ein Zeiger auf eine Zeichenfolge ist, die gültig ist, aber häufig nicht verwendet wird. Für letztere kann es natürlich zu unbequemen Ausgaben oder zu undefiniertem Verhalten kommen , wenn der Zeiger nicht richtig auf eine gültige Zeichenfolge verweist, aber diese Dinge können auch auftreten, wenn die Formatspezifizierer nicht mit den jeweiligen Argumenten übereinstimmen mehrere Argumente.
Natürlich ist es auch nicht richtig und richtig, dass die Zeichenfolge, die als einziges Argument bereitgestellt wird, Format- oder Konvertierungsspezifizierer hat, da keine Konvertierung stattfinden wird.
Das heißt, ein einfaches String-Literal wie "Hello World!"
als einziges Argument ohne Formatbezeichner in diesem String anzugeben, wie Sie es in der Frage angegeben haben:
printf("Hello World!");
ist weder veraltet oder " schlechte Praxis " noch hat es keine Schwachstellen.
Tatsächlich haben viele C-Programmierer begonnen, C oder sogar Programmiersprachen im Allgemeinen mit diesem HelloWorld-Programm und dieser printf
Aussage als erste ihrer Art zu lernen und zu verwenden .
Das wären sie nicht, wenn sie veraltet wären.
In einem Buch, das ich lese, steht, dass printf
mit einem einzigen Argument (ohne Konvertierungsspezifizierer) veraltet ist.
Dann würde ich mich auf das Buch oder den Autor selbst konzentrieren. Wenn ein Autor meiner Meinung nach wirklich solche falschen Behauptungen aufstellt und dies sogar lehrt, ohne explizit zu erklären, warum er / sie dies tut (wenn diese Behauptungen in diesem Buch wirklich buchstäblich gleichwertig sind), würde ich es als schlechtes Buch betrachten. Ein gutes Buch soll im Gegensatz dazu erklären, warum bestimmte Arten von Programmiermethoden oder -funktionen vermieden werden sollten.
Nach dem, was ich oben gesagt habe, wird die Verwendung printf
mit nur einem Argument (einem String-Literal) und ohne Formatbezeichner auf keinen Fall als "schlechte Praxis" missbilligt oder angesehen .
Sie sollten den Autor fragen, was er damit gemeint hat oder noch besser, und ihn bitten, den entsprechenden Abschnitt für die nächste Ausgabe oder die Abdrücke im Allgemeinen zu klären oder zu korrigieren.
printf("Hello World!")
ist nicht dasselbe wieputs("Hello World!")
.puts()
fügt a hinzu'\n'
. Vergleichen Sie stattdessenprintf("abc")
mitfputs("abc", stdout)