[C] puts() vs printf()

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
ProgBeginner
Beiträge: 76
Registriert: Mo Jul 29, 2013 2:26 pm

[C] puts() vs printf()

Beitrag von ProgBeginner » Do Nov 27, 2014 2:22 pm

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 ...
Verwechsle niemals Freie Software mit Freeware - da gibt es markante Unterschiede. Freie Software kann Geld kosten, Freeware ist aber selten frei.

Nemo
Beiträge: 37
Registriert: Sa Mär 02, 2013 3:18 pm

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

Beitrag von Nemo » Do Nov 27, 2014 3:15 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Do Nov 27, 2014 3:27 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

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

Beitrag von mfro » Do Nov 27, 2014 7:41 pm

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().
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

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

Beitrag von Architekt » Do Nov 27, 2014 11:16 pm

Aber wenn ich einen integer ausgeben will, komme ich faktisch nicht um ein printf("%d", num); drum herum, oder?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

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

Beitrag von mfro » Fr Nov 28, 2014 6:18 am

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten