2012-05-25 27 views
6

Ich habe einen sehr dummen Zweifel. Als ich meinem Freund C-Programm beibrachte, fragte er mich "warum benutzen wir printf, kann es nicht printg oder nur print sein". Ich konnte ihm nicht antworten. Also gibt es wirklich einen Grund hinter printf in C-Programmierung?C - Warum drucken und nicht nur drucken?

+1

Ich habe gerade angefangen, C-Programmierung zu lernen ... Ich entschuldige mich, wenn diese Frage dumm ist ... – Sharan

+0

Es gibt keine so dumme Frage. Warte, ja, da ist es. Aber dieser ist nicht wirklich ein Beispiel für einen. –

+4

Was ist an der Frage vage oder mehrdeutig? Wie ist es nicht vernünftig zu verantworten? Es gibt sicherlich vernünftige Antworten. (Es scheint auch lustig, dass K-Ballo einer der Leute war, die das trotz der akzeptierten Antwort geschlossen haben.) – jamesdlin

Antwort

14

Die f in printf steht für formatiert, es wird zum Drucken mit formatierter Ausgabe verwendet.

+0

Danke ... Also, wenn ich nur Druck schreibe, wird es funktionieren ... – Sharan

+3

@Sharan Chandran: Es gibt keine 'print' Funktion in C-Standard-Bibliothek. –

+3

@SharanChandran Die nicht formatierte Version wird nur 'puts' genannt. –

0

printf ermöglicht das Formatieren, während der Druck nicht erfolgt. Außerdem gibt es in C keinen Druck. Ich weiß nicht einmal, was printg ist.

+0

Ich weiß nicht, was "Print" ist auch ... –

+0

ja, ich erinnerte mich gerade daran, dass es nicht auch existiert :) war eine lange Zeit seit ive codiert alles in gerade c –

0

Wenn ich mich nicht irre, steht printf für "Print formatierte Daten auf Standard".

+0

Nur "Print formatiert" - 'stdout' wird als selbstverständlich vorausgesetzt, solange Sie mit' fprintf' nicht anders angeben. –

0

Wie andere festgestellt haben, die nachlauff zeigt formatierte Ausgabe (oder formatierte Eingabe für Funktionen in der scanf Familie).

Ich füge jedoch hinzu, dass die Unterscheidung von Bedeutung ist, weil es wichtig für Anrufer ist zu wissen, dass die Zeichenfolge erwartet wird, Format-Bezeichner Semantik zu haben. Zum Beispiel tun dies nicht:

char* s = get_some_user_input(); 
printf(s); // WRONG. Instead use: printf("%s", s) or fputs(stdout, s) 

Wenn s% Zeichen enthalten geschieht, Drucken direkt mit printf kann es zu nicht vorhandenen Argumente zuzugreifen, zu undefinierten Verhalten führen (und dies ist ein Grund für einige Sicherheitslücken). Beachten Sie diese Namenskonvention, wenn Sie jemals eigene printf -ähnliche variadische Funktionen definieren.