Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

putc(3S)

scanf(3S)

vprintf(3S)

varargs(5)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026