printf (englisch print formatted) ist eine in vielen Programmiersprachen vorhandene Ausgabefunktion, die ursprünglich aus der Programmiersprache C stammt.

Die printf-Funktion nimmt eine Zeichenkette mit Text und Formatierungshinweisen sowie entweder keinen, einen oder mehrere Werte entgegen. Die Zeichenkette wird ausgegeben und dabei werden die Werte in der entsprechenden Formatierung (Schreibweise) eingefügt.

In der Regel erfolgt die Ausgabe auf der Standardausgabe. Es existiert darüber hinaus die Variante fprintf für die Ausgabe auf einem beliebigen Ausgabedatenstrom (z. B. Standardfehlerausgabe oder eine Datei). Weil die printf-Funktion häufig verwendet wird und bei einfachen Programmen oder ersten Programmierversuchen auch oft zur Fehlersuche – durch die Ausgabe von Zwischenergebnissen – eingesetzt wird, hat sich der Begriff printf-Debugging für diese primitive Methode etabliert.

Verwendung in der Programmiersprache C

Bearbeiten

Hallo-Welt-Programm in C, Verwendung von printf.

#include <stdio.h>

int main(void)
{
    printf("Hallo Welt!\n");
    return 0;
}

Die Funktion besteht aus einem Formatierungsteil und den konkret auszugebenden Argumenten.

Ein Beispiel der printf-Funktion

Daten verschiedenen Datentypen werden in Strings mit folgenden Umsetzungs- / Zeichensequenzen angegeben:

Umsetzungssequenz Ausgabe
%i oder %d int bzw. Dezimalzahl
%x oder %X Hexadezimalschreibweise in Klein- oder Großschreibung
%o int in Oktalschreibweise
%ld / %li / %lo / ... long int in Dezimal / long int / long int in Oktal / ...
%lld / %lli / %llo / ... long long int / long long int / long long int in Oktal / ...
%f float oder double
%lf float oder double
%Lf long double
%c char
%s char* (String)
%p Adresse (void *)

Besondere Zeichen werden wie folgt umgesetzt:

Angabe Bedeutung / Zeichen
%% Ausgabe des Prozent-Zeichens
\n Zeilenumbruch – Sprung an den Anfang der folgenden Bildschirmzeile (LF)
\t Sprung zur nächsten Tabulatorposition (TAB)
\b Gehe ein Zeichen zurück
\a Alarm / Akustisches Signal
\r Sprung an den Anfang der aktuellen Bildschirmzeile (CR)
\\ Ausgabe des Gegenschrägstrichs "\" (Backslash)
\" Ausgabe eines doppelten Anführungszeichens
\' Ausgabe eines einfachen Anführungszeichens
\ooo "ooo" als Wert in Oktalschreibweise, stellt den Char mit entsprechender ID dar.
\xhh "hh" als Wert in Hexschreibweise, stellt den Char mit entsprechender ID dar.

Verwendung in Shell-Programmen

Bearbeiten

printf ist Bestandteil der GNU Core Utilities und damit in allen Shells der meisten Unixoiden verfügbar.[1] Das GNU Programm lehnt sicht eng an die C Funktion an. Ein Beispiel mit formatierte Ausgabe einer Zeichenkette und einer Fließkommazahl:

#!/bin/bash

# Dieses Programm läuft unter den Shells sh und bash.

# Wir wählen die US Einstellung fur das Dezimaltrennzeichen.
LC_NUMERIC="en_US.UTF-8"

# Die Zahl Pi mit 12 Nachkommastellen.
kreiszahl="3.141592653588"
wurzel_1000="31.622776601683"

# Ausgabe einer Textzeile. 
printf "Formatierte Ausgabe der Zahlen Pi und Wurzel aus 1000 mit zwei Nachkommastellen \n"

# Ausgaben der Zahlen Pi und Wurzel aus 1000.
# Die Fließkommazahlen werden mit einer Gsamtlänge von 6 Zeichen, 
# vorangestellten Leerzeichen und 2 Nachkommastellen ausgegeben.
# Die Zeichenketten "Die Zahl..." werden linksbündig mit einer 
# Gesamtlänge von 20 Zeichen dargestellt. 
# Wie in C dient der erste String der Formatierung, die beiden 
# nachfolgenden Strings (Text und Zahl) sind Argumente. 
printf "%-20s : % 6.2f \n" "Die Zahl Pi"         "$kreiszahl"
printf "%-20s : % 6.2f \n" "Die Wurzel aus 1000" "$wurzel_1000"

Das obige Beispiel erzeugt folgende Ausgabe:

Formatierte Ausgabe der Zahlen Pi und Wurzel aus 1000 
mit zwei Nachkommastellen: 
Die Zahl Pi          :   3.14 
Die Wurzel aus 1000  :  31.62

PHP

Bearbeiten

Bereits seit der Version 4 kennt PHP die Funktion printf, die sich stark an die C-Funktion anlehnt.[2]

Java

Bearbeiten

In der Programmiersprache Java wurde 2004 mit Version 5 eine ähnliche Funktionalität eingeführt. Dort haben die beiden Klassen java.io.PrintStream und java.io.PrintWriter seitdem entsprechende Methoden namens format. Außerdem gibt es eine eigene Klasse java.util.Formatter sowie eine statische Methode format der Standardklasse String, die entsprechende Formatierungsmuster verarbeiten und formatierte Strings erzeugen.[3]

Einzelnachweise

Bearbeiten
  1. Dokumentation von printf bei den GNU Core Utilities
  2. Beschreibung der Funktion prntf im PHP Manual (deutsch)
  3. New Features and Enhancements: J2SE 5.0. In: JDK 5.0 Documentation. Abgerufen am 20. Januar 2014 (englisch).

Literatur

Bearbeiten
  • Brian W. Kernighan, Dennis M. Ritchie: Programmieren in C. 1. Auflage. Hanser, München 1983, ISBN 3-446-13878-1, S. 157–159.
Bearbeiten

📚 Artikel Terkait di Wikipedia

Debuggen

Diese Art der Fehlersuche wird manchmal auch printf-Debugging genannt, in Anlehnung an die C-Funktion printf, die dafür häufig benutzt wird. Sobald die

Code-Injektion

fgets(user_input, sizeof(user_input), stdin); printf(user_input); // Sichere Version ist: printf("%s", user_input); printf("\n"); return 0; Wenn die Benutzereingabe

R (Programmiersprache)

Funktionen zum Datenmanagement, unter Verwendung regulärer Ausdrücke oder printf zur Bearbeitung und Formatierung von Zeichenketten. Schleifen, bedingte

Verilog

$display (“Hallo Welt“); // Einmalig ausführen, $display ist vergleichbar mit printf in C endmodule // Module ende Deklaration mit dem Schlüsselwort endmodule

Standardbibliothek

kann entweder eine auf gute Performance oder aber eine auf erleichtertes Debugging optimierte Version verwendet werden. Für die Verwendung etwa in eingebetteten

DTrace

optimieren und Fehler zu beheben. Somit ist es ein Programmierwerkzeug zum Debugging, es arbeitet aber nicht mit Haltepunkten wie ein klassischer Debugger

Toter Code

deaktivieren: int main() { #define DEBUG 0 int a = 3; // ... if (DEBUG) printf("%d\n", a); // ... return a; } Während der Entwicklungsphase kann hier der

JavaFX

veröffentlicht und verbesserte die Fortschrittsanzeige beim Aufstarten und das Debugging in Netbeans 6.9.1. JavaFX 2.0 erschien wie angekündigt im dritten Quartal