Vorherige Seite

Eine Ebene hoch

Nächste Seite

A2.1 Die Funktion printf

Die Funktion printf dient der Ausgabe von Informationen auf dem Bildschirm. Neben einfachen Textzeilen können alle elementaren Datentypen der Sprache C formatiert ausgegeben werden.

Die Funktion printf erwartet einen oder mehrere Parameter. Der erste, obligatorische Parameter ist eine Zeichenkette, der die Ausgabe formatiert. Die nachfolgenden optionalen Parameter beinhalten die Daten, die dargestellt werden sollen:

Der Formatstring kann eine Konstante oder eine Variable sein. Er beinhaltet normalen Text, mit einigen Platzhaltern für die Daten, die ausgegeben werden sollen. Ein Platzhalter wird mit einem Prozentzeichen '%' eingeleitet und endet mit einem Buchstaben, der den Datentyp repräsentiert.

Beispiel: Die Variable v steht für die Geschwindigkeit eines Autos und ist vom Typ double. Die Ausgabe der Geschwindigkeit erfolgt mit folgender Anweisung:

Der Platzhalter für die Variable v wird hinter dem Wort Geschwindigkeit: mit dem Prozentzeichen eingeleitet. Der Buchstabe f steht für den Datentyp double.

Die Funktion printf kann auch mit nur einen Parameter zur reinen Textausgabe verwendet werden. Die Anweisung

gibt den Text hello world auf den Bildschirm aus.

Der Platzhalter kann neben den Buchstaben für den Datentyp Angaben zur Formatierung des Datums enthalten. Allgemein hat ein Platzhalter folgendes Aussehen:

In den folgenden Tabellen werden die einzelnen Teile der Platzhalter aufgelistet.

Hier ein paar Beispiele:

Wenn für die darzustellenden Daten falsche Platzhalter verwendet werden, kann es zu Problemen kommen. Betrachten Sie folgendes Programmstück:

Beim Aufruf der Funktion printf werden alle Parameter der Reihe nach in den Speicher kopiert. In unserem Beispiel sieht das so aus:

Der Platzhalter %d wird fälschlicherweise auf die Variable d vom Typ double angewendet. Das heißt, die Variable d wird hier als int interpretiert. Die Programmierumgebung, in der das Programm getestet wurde, verwendet für double 8 Byte und für int nur 4 Byte. Der Befehl printf nimmt daher von der Variable d nur die ersten vier Byte und interpretiert sie als int.

Der nächste Platzhalter steht wieder für den Typ int. Da aber der vorherige Platzhalter die Variable vom Typ double nur zur Hälfte eingelesen hat, versucht jetzt der zweite Platzhalter die zweite Hälfte der Variable d als int zu interpretieren. Es ist offensichtlich, das dabei Unsinn heraus kommt. In der Testumgebung sah das so aus:

Lange Rede, kurzer Sinn: Es ist peinlichst darauf zu achten, dass die Platzhalter mit den dazugehörigen Datentypen zusammenpassen.