puts oder printf
-
Hallo,
ich habe mal eine Frage zu den beiden genannten Befehlen:
wenn ich nur einen String ohne irgendwelche %d oder %lf usw. drin ausgeben will, also beispielsweise einfach nur eine Eingabeaufforderung, wo liegen die Vor- bzw. Nachteile von puts im Vergleich zu printf?! Gibts da irgendwelche Unterschiede bezüglich Geschwindigkeit, Speicher o.ä.?! Oder ist es einfach nur eine Stilfrage?!
Grüße und vielen Dank im Voraus!
-
puts(s) ist tendenziell eine schnellere Variante von printf("%s\n", s) - der Format-String muss nicht mehr interpretiert werden, obwohl das bei einem derart kurzen Format-String nicht so sehr ins Gewicht fällt, dass ich mich verbiegen würde, um printf zu vermeiden.
Wenn das Newline-Zeichen dich stört, ist außerdem fputs(s, stdout) ein guter Ersatz für printf("%s", s), aus dem selben Grund, und weil du dann nicht in Fallen wie printf(s); laufen kannst, was immer problematisch ist, wenn s ein Prozentzeichen enthalten kann - insbesondere, wenn der String aus einer nicht vertrauenswürdigen Quelle kommt.
-
ich hab ein cpp-Konsolenprogramm erstellt, dabei ist mir aufgefallen:
printf-Ausgaben kommen erstmal nicht in der Konsole an.
Erst wenn ich abschließend ein puts( "" ) absetze, dann werden alle printf-Ausgaben in die Konsole geschrieben.
Woran liegt das?
-
printf schreibt nicht direkt auf die Devices sondern erst wenn der Puffer voll ist oder du in durekt mit man: fflush leerst.
-
supertux schrieb:
printf schreibt nicht direkt auf die Devices sondern erst wenn der Puffer voll ist oder du in durekt mit man: fflush leerst.
Oder kurz vor dem Beenden.
-
der gcc zumindest, ersetzt bei der Optimierung sogar einfache printfs durch puts.
-
Führt fflush nicht zu undefinierten Verhalten?
-
Nein, nicht bei Ausgabestreams.
DrGreenthumb schrieb:
der gcc zumindest, ersetzt bei der Optimierung sogar einfache printfs durch puts.
oh
-
ichdachtebloß schrieb:
Führt fflush nicht zu undefinierten Verhalten?
Nur bei stdin, nicht beim Ouput.
-
chmbw schrieb:
... wo liegen die Vor- bzw. Nachteile von puts im Vergleich zu printf?!
Ein Vorteil von printf ist, das ein Programm nicht abstürzt, wenn eine NULL als Zeichenkette übergeben wird.
Guckst du Testprogramm:int main() { char* s = NULL; printf ("%s", s); // Ok :) puts (s); // Crash, hasta la vista :( return 0; }
-
herzlichen dank für eure vielen antworten!