Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 6 Formatierte Ausgabe mit printf

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.

Abbildung
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.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de