vsprintf_s, vswprintf_s

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu stdio.h - Index


Header-Datei

stdio.h

Kategorie

Funktionen für die formatierte Eingabe/Ausgabe

Prototyp

int vsprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg);

int vswprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, va_list arg);

Beschreibung

Ersetzt vsprintf, vswprintf und fügt Sicherheitserweiterungen hinzu.

Die v...printf-Funktionen können als alternative Eintrittspunkte für die ...printf-Funktionen betrachtet werden. Sie verhalten sich genau wie ihre ...printf-Entsprechungen, akzeptieren jedoch einen Zeiger auf eine Argumentliste statt der Argumentliste selbst.

vsprintf_s akzeptiert einen Zeiger auf eine Argumentliste, ordnet die Argumente den Formatbezeichnern in dem String zu, auf den format zeigt, und schreibt die formatierten Daten in einen Stream. Die Anzahl der Formatbezeichner muss gleich der Anzahl der Argumente sein.

vfprintf_s entspricht vsprintf, vswprintf, fügt aber den Parameter n und Laufzeiteinschränkungen bezüglich der Gültigkeit von s, format und der Elemente in arg hinzu, die einem %s-Formatbezeichner entsprechen (dürfen keine Null-Zeiger sein).

Bei einer Verletzung von Laufzeiteinschränkungen setzt vsprintf_s '\0' auf s[0].

Im Gegensatz zu vsnprintf_s, vsnwprintf_s verkürzt vsprintf_s das Ergebnis nicht, damit es in das Array passt, auf das s zeigt. Stattdessen wird eine Laufzeiteinschränkungsverletzung ausgegeben.

Rückgabewert

vsprintf_s gibt die Anzahl der ausgegebenen Zeichen zurück. Bei einem Fehler gibt vsprintf_s einen negativen Wert zurück. In allen anderen Fällen gibt vsprintf_s Null zurück.

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 = vsprintf_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;
}

Portabilität

POSIX Win32 ANSI C ANSI C++

vsprintf_s

+

+

+

+

vswprintf_s

+

+

+


Siehe auch