sprintf(3S) (BSD Compatibility Package) sprintf(3S)
NAME
sprintf, vsprintf - Konvertierung formatierter Ausgabe
SYNTAX
/usr/ucb/cc [flag ...] file ... -lucb
#include <stdio.h>
char sprintf(char *s, *format [,arg] ...);
char *vsprintf(char *s, *format, valist ap);
BESCHREIBUNG
sprintf stellt die Ausgabe, gefolgt von dem NULL-Zeichen (\0), in auf-
einanderfolgenden Bytes in die Zeichenkette s ab. Der Benutzer ist
dafür verantwortlich, daß genügend Speicherplatz verfügbar ist.
vsprintf entspricht der Funktion sprintf, nur wird sie nicht mit einer
variablen Anzahl von Argumenten aufgerufen, sondern mit einer Liste
von Argumenten, wie in varargs definiert.
Jede dieser Funktionen konvertiert, formatiert und schreibt ihre Argu-
mente in der durch format angegebenen Form. format ist eine Zeichen-
kette, die zwei Objekttypen enthält: einfache Zeichen, die lediglich
in den Ausgabestrom kopiert werden und Anweisungen für die Konvertie-
rungen, die jeweils die Konvertierung und Ausgabe von null oder mehr
Argumenten bewirken. Die Ergebnisse sind undefiniert, wenn keine aus-
reichende Anzahl von Argumenten für das Format enthalten sind. Wenn
das Format bereits ausgeschöpft ist, und noch Argumente vorhanden
sind, werden diese überzähligen Argumente einfach ignoriert.
Jede Konvertierungsanweisung wird durch das Zeichen % eingeleitet.
Nach dem % stehen nacheinander folgende Elemente:
- Null oder mehr Flags, die die Bedeutung der Konvertierungsanweisung
modifizieren.
- Eine optionale Folge aus Dezimalziffern, die eine Mindestfeldgröße
("field width") angeben. Wenn der konvertierte Wert weniger Zeichen
als die Feldgröße hat, wird er links (oder rechts, wenn das weiter
unten beschriebene Flag - für linksbündiges Ausrichten angegeben
wurde) aufgefüllt. Es wird mit Leerzeichen aufgefüllt, außer wenn
die Zeichenkette für die Feldbreite mit einer Null beginnt. In die-
sem Fall wird der Wert mit Nullen aufgefüllt.
- Eine Genauigkeitsangabe precision, die die Mindestanzahl von Zif-
fern angibt, die für die Konvertierungen mit d, i, o, u, x oder X
angezeigt werden sollen, die Anzahl der Ziffern, die nach dem Dezi-
malpunkt für Konvertierungen mit e, E und f angezeigt werden sol-
len, die maximale Anzahl signifikanter Zeichen für die Konvertie-
rung mit g und G oder die maximale Anzahl Zeichen, die aus einer
Zeichenkette in der s-Konvertierung ausgegeben werden soll. Die
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
sprintf(3S) (BSD Compatibility Package) sprintf(3S)
Genauigkeit wird durch einen Punkt ".", gefolgt von einer Folge aus
Dezimalziffern angegeben. Eine NULL-Zeichenkette wird als Null
behandelt. Ein durch die Genauigkeit festgelegtes Auffüllung über-
schreibt das Auffüllen, das durch die Feldgröße festgelegt wird.
- Ein optionales l gibt an, daß ein nachfolgendes Konvertierungszei-
chen d, i, o, u, x oder X auf ein langes ganzzahliges Argument
angewendet wird. Ein l vor allen anderen Konvertierungszeichen wird
ignoriert.
- Ein Zeichen, das den Typ der Konvertierung angibt.
Eine Feldgröße und/oder eine Genauigkeit kann auch durch einen Stern
(*) anstelle einer Ziffernfolge angegeben werden. In diesem Fall gibt
ein ganzzahliges Argument die Feldgröße bzw. die Genauigkeit an. Das
Argument, das tatsächlich konvertiert wird, wird erst abgerufen, wenn
der Konvertierungsbuchstabe angezeigt wird. Das heißt die Argumente,
die die Feldgröße oder die Genauigkeit angeben, müssen vor dem zu kon-
vertierenden Argument (falls vorhanden) stehen. Ein negatives Argument
für die Feldgröße wird als ein Flag - gefolgt von einer positiven
Feldgröße interpretiert. Wenn das Argument für die Genauigkeit negativ
ist, wird es auf Null gesetzt.
Die Flag-Zeichen und ihre Bedeutungen:
- Das Ergebnis der Konvertierung wird linksbündig im Feld ausge-
richtet.
+ Das Ergebnis einer Konvertierung mit Vorzeichen beginnt immer
mit einem Vorzeichen (+ oder -).
blank Wenn das erste Zeichen einer Konvertierung mit Vorzeichen kein
Vorzeichen ist, wird dem Ergebnis ein Leerzeichen vorangestellt.
Dies impliziert, daß bei Anzeige von Leerzeichen-Flags und dem
Flag + das Leerzeichen-Flag ignoriert wird.
# Dieses Flag gibt an, daß der Wert in eine andere Form konver-
tiert wird. Bei Konvertierungen mit c, d, i, s und u hat dieses
Flag keine Auswirkungen. Bei einer Konvertierung mit o wird die
Genauigkeit erhöht, so daß die erste Ziffer des Ergebnisses
eine Null ist. Für eine Konvertierung mit x oder X wird einem
Ergebnis, das ungleich Null ist, ein 0x bzw. 0X vorangestellt.
Für Konvertierungen mit e, E, f, g und G enthält das Ergebnis
immer ein Dezimalpunkt, auch wenn keine weiteren Ziffern fol-
gen. (Normalerweise steht in Ergebnissen dieser Konvertierungen
nur dann ein Dezimalpunkt, wenn eine Ziffer folgt.) Bei Konver-
tierungen mit g und G werden nachgestellte Nullen nicht aus dem
Ergebnis gestrichen, wie sonst üblich.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
sprintf(3S) (BSD Compatibility Package) sprintf(3S)
Die Konvertierungszeichen und ihre Bedeutungen:
d, i, o, u, x, X
Das Argument vom Typ int (Ganzzahl) wird in eine dezimale
Schreibweise mit Vorzeichen (d oder i), eine oktale ohne Vor-
zeichen (o), eine dezimale ohne Vorzeichen (u) oder eine hexa-
dezimale ohne Vorzeichen (x bzw. X) konvertiert. Die Buchstaben
abcdef werden für eine x-Konvertierung und die Buchstaben
ABCDEF für eine X-Konvertierung verwendet. Die Genauigkeit gibt
die Mindestanzahl der auszugebenden Ziffern an. Wenn der kon-
vertierte Wert auch mit weniger Ziffern angezeigt werden kann,
wird er mit führenden Nullen erweitert. (Aus Gründen der Kompa-
tibilität mit älteren Versionen kann das Auffüllen mit führen-
den Nullen auch dadurch angegeben, daß der Feldgröße eine Null
vorangestellt wird. Dies impliziert keinen Oktalwert für die
Feldgröße.) Der Standardwert für die Genauigkeit ist 1. Das
Ergebnis aus der Konvertierung eines Nullwertes mit einer
Genauigkeit von Null ist eine NULL-Zeichenkette.
f Das Argument vom Typ float oder double (Gleitkomma- oder dop-
peltgenaue Gleitkommazahl) wird in eine dezimale Schreibweise
der Form [-]ddd.ddd konvertiert, wobei die Anzahl der Ziffern
nach dem Dezimalpunkt der Genauigkeitsangabe entspricht. Wenn
die Genauigkeitsangabe fehlt, werden 6 Ziffern ausgegeben; wenn
die Genauigkeit explizit 0 ist, werden keine Ziffern und kein
Dezimalpunkt ausgegeben.
e, E Das Argument vom Typ float oder double (Gleitkomma- oder dop-
peltgenaue Gleitkommazahl) wird im Format [-]d.ddde±ddd konver-
tiert, wobei eine Ziffer vor dem Dezimalpunkt steht und die
Anzahl der Ziffern nach dem Dezimalpunkt der Genauigkeit ent-
spricht. Wenn die Genauigkeitsangabe fehlt, werden 6 Ziffern
ausgegeben; wenn die Genauigkeit Null ist, erscheint kein Dezi-
malpunkt. Der Formatcode E erzeugt eine Zahl mit E anstatt mit
e, am Anfang des Exponenten. Der Exponent enthält immer minde-
stens zwei Ziffern.
g, G Das Argument vom Typ float oder double (Gleitkomma- oder dop-
peltgenaue Gleitkommazahl) wird im Format f oder e (oder in der
Form E bei einem Formatcode G) ausgegeben, wobei die Genauig-
keit die Anzahl der signifikanten Stellen angibt. Das verwen-
dete Format hängt vom konvertierten Wert ab: e oder E wird nur
verwendet, wenn der sich aus der Konvertierung ergebende Expo-
nent kleiner als -4 oder größer als die Genauigkeitsangabe ist.
Nachgestellte Nullen werden aus dem Ergebnis gestrichen. Ein
Dezimalpunkt erscheint nur dann, wenn ihm eine Ziffer folgt.
Die Formate e, E, f, g und G geben unbestimmte IEEE-Werte als unend-
lich bzw. NaN aus.
c Das Argument vom Typ char (Zeichen) wird ausgegeben.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
sprintf(3S) (BSD Compatibility Package) sprintf(3S)
s Das Argument wird als Zeichenkette (Zeiger auf ein Zeichen)
interpretiert und Zeichen aus der Zeichenkette werden bis zum
Auftreten eines NULL-Zeichens (\0) ausgegeben, oder bis die in
der Genauigkeitsangabe angegebene Anzahl der Zeichen erreicht
ist. Wenn die Genauigkeitsangabe fehlt, wird sie als unendlich
definiert, so daß alle Zeichen bis zum ersten NULL-Zeichen aus-
gegeben werden. Ein NULL-Wert für führt zu undefinierten Ergeb-
nissen.
% Gibt ein % aus; es wird kein Argument konvertiert.
In keinem Fall hat eine fehlende oder kleine Feldgröße das Abschneiden
eines Feldes zur Folge. Wenn das Ergebnis einer Konvertierung länger
als die Feldgröße ist, wird das Feld einfach erweitert, um das Konver-
tierungsergebnis aufnehmen zu können. Aufgefüllt wird nur, wenn die
angegebene Feldgröße die tatsächliche Größe übersteigt.
RÜCKGABEWERT
Bei erfolgreicher Ausführung geben sprintf und vsprintf geben immer s
zurück.
BEISPIELE
Der Inhalt von buf ist das Datum und die Uhrzeit in der Form Sonntag,
Juli 3, 10:02, wobei weekday und month Zeiger auf Zeichenketten mit
Endenull (NULL) sind:
sprintf(buf, "%s, %s %i, %d:%.2d", weekday, month, day, hour,
min);
Die folgende Routine bewirkt, daß pi mit einer Genauigkeit von 5 Dezi-
malstellen in buf abgelegt wird:
sprintf(buf, "pi = %.5f", 4 * atan(1. 0));
HINWEISE
Bei extrem langen Feldern (>128 Zeichen) schlagen die Routinen fehl.
SIEHE AUCH
putc(3S), scanf(3S), vprintf(3S), varargs(5).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98