Seite 1 von 1

[C] puts() vs printf()

Verfasst: Do Nov 27, 2014 2:22 pm
von ProgBeginner
Ich muss mich doch gerade schwer wundern ...

Im Wikipedia-Artikel "Hallo-Welt - Programm" bereits ganz oben wird ein Hallo Welt-Programm in C vorgestellt.

Code: Alles auswählen

#include <stdio.h>
 
int main(void)
{
    puts("Hallo Welt!");
}


Ist puts() noch aktuell? Ich kenne nur printf()...

Ich überlege, ob ich den Artikel verbessere - vorher würde mich aber genauer interessieren, ob es zwischen puts() und printf() einen markanten Unterschied gibt ...

Re: [C] puts() vs printf()

Verfasst: Do Nov 27, 2014 3:15 pm
von Nemo
printf ist im Grunde eine Kombination aus sprintf und puts. Der Unterschied ist, dass puts nur mit normalen Strings umgehen kann und printf auch mit Formatstrings. Ich vermute printf ist mehr verbreitet, weil es eben beides kann und man dadurch nicht zwischen den beiden Funktionen wechseln muss.

Re: [C] puts() vs printf()

Verfasst: Do Nov 27, 2014 3:27 pm
von Xin
ProgBeginner hat geschrieben:Ist puts() noch aktuell? Ich kenne nur printf()...

Ich überlege, ob ich den Artikel verbessere - vorher würde mich aber genauer interessieren, ob es zwischen puts() und printf() einen markanten Unterschied gibt ...
puts() ist nicht nur noch aktuell, sondern für einfache String-Ausgaben die bessere Wahl, da kein Formatstring interpretiert werden muss, damit auch kein Sicherheitsrisiko besteht.

Re: [C] puts() vs printf()

Verfasst: Do Nov 27, 2014 7:41 pm
von mfro
Wer statisch linkt (oder statisch linken muß), wird feststellen, daß ein "puts("Hello World")" ein Programm erzeugt, das lediglich irgendwo zwischen 5 und 30% von der Größe eines "printf("Hello World\n")" groß ist.

Wer also diesbezüglich noch zum "alten Schlag" gehört und Ressourceneffizienz für eine Tugend hält, nimmt überall dort, wo's geht puts().

Re: [C] puts() vs printf()

Verfasst: Do Nov 27, 2014 11:16 pm
von Architekt
Aber wenn ich einen integer ausgeben will, komme ich faktisch nicht um ein printf("%d", num); drum herum, oder?

Re: [C] puts() vs printf()

Verfasst: Fr Nov 28, 2014 6:18 am
von mfro
Architekt hat geschrieben:Aber wenn ich einen integer ausgeben will, komme ich faktisch nicht um ein printf("%d", num); drum herum, oder?
Posix.1 kennt ecvt(), fcvt() und gcvt(), abhängig von der Plattform gibt's auch itoa() oder ltoa() (manchmal auch mit einem Unterstrich davor, weil kein Standard), letztere erzeugen deutlich kleineren Code (weil sie keinen floating point support mitschleppen), man begibt sich damit aber in "nonstandard" Untiefen und erzeugt u.U. buffer overflow Angriffsflächen, wenn man nicht aufpasst.

Tatsächlich sollte man die Funktionen nur dann verwenden, wenn man aus Platzgründen (embedded, z.B.) nicht anders kann, Sicherheit geht vor.