Kapitel 6 Formatierte Ausgabe mit printf
Jetzt wurde schon des Öfteren die Funktion printf() zur formatierten Ausgabe verwendet, ohne bisher genauer darauf einzugehen.
Zunächst die Syntax von printf():
#include <stdio.h>
int printf(const char *format,...);
Der Rückgabewert von printf() ist die Anzahl der Zeichen, die ausgegeben werden (ohne das Terminierungszeichen '\0'), oder im Fehlerfall EOF. Folgendes Beispiel demonstriert dies:
/* printf1.c */
#include <stdio.h>
int main(void) {
int zeichen;
zeichen=printf("Hallo Welt");
printf(" enthaelt %d Zeichen\n",zeichen); //10 Zeichen
return 0;
}
printf() bekommt mindestens einen Parameter, nämlich den Formatstring. Dieser Formatstring besteht wiederum aus einem Ausgabetext (Stringkonstante), der nullterminiert ist (\0) und/oder einer Formatanweisung.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 6.1
printf() in seine einzelnen Bestandteile zergliedert
Bei dem Formatstring handelt es sich um eine Zeichenkette beliebiger Länge. Zum Beispiel:
printf("Ich bin der Formatstring in der printf-Anweisung");
Achtung Das mit der beliebigen Länge stimmt nicht ganz. Auch mit printf() kann es einen Pufferüberlauf geben, sollte der Text länger sein als erlaubt. Ein Pufferüberlauf (Buffer Overflow) wird in Hackerkreisen gerne verwendet, um an root-Rechte (Rechte des System Administrators) zu kommen. Bei mehr als 65535 Zeichen würde printf(), laut C99 Standard, Probleme bekommen (bei dem C89 Standard sind es 32767 Zeichen).
|
Die Funktion printf() wird bei der Ausführung von rechts nach links abgearbeitet. Dabei sucht die Funktion nach einem Ausgabetext (Stringkonstante) und Formatanweisungen.
Diese Formatanweisung wird von printf() dann mit entsprechendem Parameter der variablen Liste ausgegeben. Formatanweisungen beginnen alle mit einem %-Zeichen. Dahinter folgt ein Buchstabe, der den Datentyp des Formates angibt. %d steht z.B. für eine dezimale Ganzzahl. Die Formatanweisung lässt sich natürlich noch erweitert formatieren.
Bevor die einzelnen und erweiterten Formatanweisungen besprochen werden, folgt erst einmal ein Kapitel, welches zeigt, was für Datentypen Sie überhaupt zur Verfügung haben.
Die Ausgabe von printf() muss übrigens nicht ausschließlich auf dem Bildschirm erfolgen. Sie können die Standardausgabe (stdout) auch in eine Datei umleiten.
/* printf2.c */
#include <stdio.h>
int main(void) {
printf("Diese Ausgabe soll in einer Textdatei stehen\n");
return 0;
}
Übersetzen Sie dieses Programm wie gewohnt und starten es, indem Sie in einer Konsole Folgendes eingeben (als Programmname sei hier »out« gegeben):
$ out > test.txt
Jetzt befindet sich im aktuellen Verzeichnis eine Datei namens »test.txt« mit dem Inhalt, den printf() normalerweise auf dem Bildschirm ausgegeben hätte.
|