Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

vsnprintf - Formatierte Ausgabe in eine Zeichenkette

&pagelevel(4)&pagelevel

Definition

#include <stdarg.h> #include <stdio.h>

int vnsprintf(char *s, size_t n, const char *format, va_list arg);

vsnprintf gleicht der Funktion snprintf. Im Unterschied zu snprintf erlaubt v vsnprintf die Ausgabe von Argumenten, deren Anzahl und Datentyp zum Übersetzungszeitpunkt nicht bekannt sind. vsnprintf wird innerhalb von Funktionen benutzt, an die der Aufrufer jeweils eine andere Formatzeichenkette sowie andere auszugebende Argumente übergeben kann. Die Formalparameterliste der Funktionsdefinition sieht dafür eine Formatzeichenkette format und eine variable Argumentenliste ", ..." vor.

vsnprintf arbeitet eine Argumentenliste arg mit internen va_arg-Aufrufen sukzessive ab und schreibt die Argumente gemäß der Formatzeichenkette format in die Zeichenkette s.
Die variable Argumentenliste arg muss vor dem Aufruf von vsnprintf mit dem Makro va_start initialisiert worden sein.

vsnprintf bricht die Ausgabe beim Erreichen der mit dem Parameter n spezifizierten Länge ab, wodurch ein Pufferüberlauf verhindert werden kann.

Parameter

char *s

Zeiger auf die Ergebniszeichenkette. vsnprintf schließt die Zeichenkette mit dem Nullbyte (\0) ab. Die maximale Länge der Ausgabe beträgt daher n-1.

size_t n

Länge des für die Ergebniszeichenkette reservierten Bereichs. n darf nicht größer sein als INT_MAX. Bei n = 0 erfolgt keine Ausgabe.

const char *format

Formatzeichenkette wie bei printf mit KR- oder ANSI-Funktionalität (Beschreibung siehe dort).

Es gibt nur bzgl. der Steuerzeichen für Zwischenraum (\n, \t, etc.) folgenden Unterschied: vsnprintf trägt in die Ergebniszeichenkette den EBCDIC-Wert des Steuerzeichens ein. Erst bei der Ausgabe in Textdateien werden die Steuerzeichen je nach Art der Textdatei in ihre entsprechende Wirkung umgesetzt (siehe Abschnitt "Zwischenraum“ (Grundbegriffe)).

va_list arg

Zeiger auf die variable Argumentenliste, die mit va_start initialisiert wurde.

Returnwert

< 0

n > INT_MAX oder Ausgabefehler.

 

= 0 .. n-1

Die Ausgabe konnte vollständig aufbereitet werden. Der Returnwert gibt die Länge der Ausgabe ohne das abschließende NULL-Zeichen an.

 

> n

Die Ausgabe konnte nicht vollständig aufbereitet werden. Der Returnwert gibt die Länge ohne das abschließende NULL-Zeichen an, die eine vollständige Ausgabe benötigen würde.


Hinweise

vsnprintf beginnt in der variablen Argumentenliste immer mit dem ersten Argument. Die Ausgabe ab einem beliebigen Argument lässt sich mit entsprechend vielen va_arg-Aufru-fen vor Aufruf der Funktion vsnprintf erreichen. Jeder va_arg-Aufruf positioniert die Argumentenliste um ein Argument weiter.

vsnprintf ruft nicht das Makro va_end auf. Da vsnprintf das Makro va_arg benutzt, ist der Wert von arg nach der Rückkehr unbestimmt.

Bei sich überlappenden Speicherbereichen ist das Verhalten undefiniert.

Siehe auch

vfprintf, vprintf , vsprintf