vsnprintf_s, vsnwprintf_s
Nach oben zu stdio.h - Index
Header-Datei
stdio.h
Kategorie
Funktionen für die formatierte Eingabe/Ausgabe
Prototyp
int vsnprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg);
int vsnwprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, va_list arg);
Beschreibung
Ersetzt vsnprintf, vsnwprintf und fügt Sicherheitserweiterungen hinzu.
vsnprintf_s entspricht vsnprintf, vsnwprintf, fügt aber explizite Laufzeiteinschränkungen bezüglich der Gültigkeit von s und format hinzu. Außerdem darf n nicht gleich Null und muss kleiner als RSIZE_MAX sein. Darüber hinaus darf kein Argument in der Argumentliste, das zu einem %s-Formatbezeichner gehört, ein Null-Zeiger sein.
Bei einem Fehler setzt vsnprintf_s '\0' auf s[0].
Im Gegensatz zu vsprintf_s, vswprintf_s verkürzt vsnprintf_s das Ergebnis auf die Länge des Arrays, auf das s zeigt.
Wenn die Anzahl der ausgegebenen Bytes:
- < nsize ist, werden alle Zeichen, einschließlich des abschließenden ‘\0’ geschrieben.
- == nsize ist, werden nsize Zeichen ohne das abschließende ‘\0’ geschrieben.
- > nsize ist, werden nsize Zeichen ohne das abschließende ‘\0’ geschrieben.
Ist nsize gleich 0, wird nichts in den String geschrieben (und er könnte NULL sein).
Rückgabewert
Anzahl der ausgegebenen Zeichen oder, wenn nsize gleich Null ist, die Anzahl der erforderlichen Bytes ohne das abschließende Zeichen ‘\0’.
'\0' wird nur geschrieben, wenn der Rückgabewert größer als Null und kleiner als n ist.
Beispiel
#include <stdio.h> #include <conio.h> #include <stdarg.h> char buffer[80]; int vspf(char *fmt, ...) { va_list argptr; int cnt; va_start(argptr, fmt); cnt = vsnprintf_s(buffer, 70,fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber = 30; float fnumber = 90.0; char string[4] = "abc"; vspf("%d %f %s", inumber, fnumber, string); printf_s("%s\n", buffer); return 0; }