Platzhalter für String-Funktionen

Die folgende Tabelle zeigt die Platzhalter, die für String-Ein-/Ausgabe-Funktionen der Standard-C-Library. Viele andere Funktionen bauen mit Hilfe der stdarg-Library auf den Standardfunktionen auf, die Tabelle gilt also auch für viele andere Funktionen.

Platzhaltertypen

Integers
Sonderzeichen Bedeutung Beispiele
%d Integer (32 Bit, mit Vorzeichen) 31; -31
%i Integer (32 Bit, mit Vorzeichen) 31; -31
%u Integer (32 Bit, positiv, ohne Vorzeichen) 31
%x integer in hexadezimaler Schreibweise (hex, kein Standard!), kleine Buchstaben 1f
%X integer in hexadezimaler Schreibweise (hex, kein Standard!) 1F
%o Integer in oktaler Schreibweise 37
%p Pointer
Fließkommazahlen
Sonderzeichen Bedeutung Beispiele
%f Fließkommazahl 47.11
%e Fließkommazahl in Exponentialdarstellung (kleines e) 4.711e+1
%E Fließkommazahl in Exponentialdarstellung (großes E) 4.711E+1
Buchstaben und Strings
Sonderzeichen Bedeutung Beispiele
%c Wert als ASCII-Zeichen (character) a
%s Adresse als Zeichenkette (String) Hallo proggen.org
Sonstiges
Sonderzeichen Bedeutung Beispiele
%n Bisher gedruckte Zeichen auf einen Pointer (auf ein signed int) schreiben
%% Druckt ein (nur ein!) Prozentzeichen %

Formatierung

Diese Platzhalter können auch nach folgendem Muster formatiert werden:

%[Flags][Feldbreite][.][Genauigkeit][Eingabetyp]Platzhaltertyp

Bis auf den Platzhaltertyp sind alle Angaben optional.

Flags

Zeichen Bedeutung Beispiele
- linksbündig in der Feldbreite „4711 “
+ Erzwingt ein Vorzeichen auch bei positiven Zahlen „ +4711“
-Leerzeichen- Die Feldbreite wird mit Leerzeichen vor der Zahl aufgefüllt „ 4711“
# Erzwingt eine Beschreibung der Zahlenbasis (0 für Oktal, 0x/0X für Hexadezimal )
bei Fließkommazahlen (E, e) folgt ein Punkt, auch wenn keine Nachkommastellen gedruckt werden, bei G und g werden die nachfolgenden Nullen nicht entfernt
„0123“, „0xbadc0de“, „4711.“
0 Die Feldbreite wird mit Nullen vor der Zahl aufgefüllt „00004711“

Feldbreite

Wird eine Zahl angegeben, so wird für diesen Platzhalter mindestens diese Breite reserviert. Passt der einzufügende Inhalt nicht in den Platzhalter, so wird mehr Platz verwendet - es wird nicht abgeschnitten. Ist der einzufügende Inhalt kürzer, so wird der Platz entsprechend der Flags aufgefüllt (per Voreinstellung mit Leerzeichen).

Wird ein * angegeben, so folgt ein zusätzliches Integer-Argument in der Parameterliste, der die Feldbreite angibt und zwar vor dem Argument, das ausgegeben wird.

Beispiel:

  printf( "[%*s]\n", 10, "Hallo" );
  printf( "[%-*s]\n", 10, "Hallo" );

Ausgabe:

[     Hallo]
[Hallo     ]

Genauigkeit

Die Genauigkeit gibt an, wie ab wann eine Ausgabe gekürzt wird.

Dies ist abhängig von Platzhaltertyp.

Platzhaltertyp Beschreibung Beispiel Eingabe Ausgabe
Integer Gibt die minimale Zahl zu schreibender Ziffern an, fehlende Ziffern werden vorangestellte Nullen aufgefüllt. Längere Integerzahlen werden nicht gekürzt. Wird 0 angegeben, so wird der Wert 0 nicht gedruckt. %.10d 10 „0000000010“
f Anzahl der zu druckenden Ziffern nach dem Dezimalpunkt %.3f 10.1234567 „10.123“
e, E Anzahl der zu druckenden Ziffern nach dem Dezimalpunkt %.3e 10.1234567 „1.012e+01“
g, G Anzahl der zu druckenden Ziffern %.5g 10.1234567 „10.123“
s Anzahl der zu druckenden Zeichen %.5s „Hallo proggen.org“ „Hallo“
s Zusätzliches Argument, der dieses Argument beschreibt %.*s 5, „Hallo proggen.org“ „Hallo“

Beispiel:

  printf( "[%-.*s]\n", 5, "Hallo" );
  printf( "[%-*.*s]\n", 10, 5, "Hallo" );
  printf( "[%*.*s]\n", 10, 5, "Hallo" );

Ausgabe:

[Hallo]
[Hallo     ]
[     Hallo]

Eingabetyp

Der Eingabetyp beschreibt das Format des Parameters - also der Variable, die ausgegeben werden soll.

Kürzel Platzhaltertyp Interpretation
h i, d, o, u, x, X Das Argument wird als short int (hd) oder unsigned short int (hu) interpretiert
l i, d, o, u, x, X Das Argument wird als long int (ld) oder unsigned long int (lu) interpretiert
t i, d, o Das Argument wird entsprechend der Größe von ptrdiff_t verwendet
z u, x, X Das Argument wird entsprechend der Größe von size_t verwendet
l c, s Das Argument wird als wide char (lc) oder wide string (ls) interpretiert
L e, E, f, g, G Das Argument wird als long double interpretiert

Die Platzhalter werden bei folgenden Funktionen verwendet

Funktion Bedeutung
fprintf Formatierte Ausgabe in einen Stream
fscanf Formatiertes Lesen aus einem Stream
printf Formatierte Ausgabe auf den stdout-Stream
scanf Formatiertes Lesen aus aus dem stdin-Stream
sprintf Formatierte Ausgabe auf einen C-String (char-Array)
sscanf Formatiertes Lesen aus einem C-String (char-Array)
vfprintf Formatierte Ausgabe in einen Stream mit Parameterliste
vprintf Formatierte Ausgabe auf den stdout-Stream mit Parameterliste
vsprintf Formatierte Ausgabe auf einen C-String (char-Array)

Beispiele

int integer = -4711;
double floatingPoint = 4711.0815;
char string[] = "Hallo proggen.org";
 
/* Integer */
 
printf( "Mit Vorzeichen: %d - ohne Vorzeichen: %u", integer, integer );
printf( "Hexadezimal (kein Standard): %x\n", integer );
printf( "Oktal                      : %o\n", integer );
 
/* Fließkommazahlen */
 
printf( "Fließkommazahl             : %f\n", floatingPoint );
printf( "Exponential                : %e\n", floatingPoint );
 
/* Buchstaben und Strings */
 
printf( "Buchstabe                  : %c\n", string[0] );
printf( "Buchstaben                 : %c%c%c%c%c\n", string[0], string[11], string[2], string[3], string[4] );
printf( "String                     : %s\n", string );