vfprintf_s, vfwprintf_s
Nach oben zu stdio.h - Index
Header-Datei
stdio.h
Kategorie
Funktionen für die formatierte Eingabe/Ausgabe
Prototyp
int vfprintf_s(FILE * restrict stream, const char * restrict format, va_list arg);
int vfwprintf_s(FILE * restrict stream, const wchar_t * restrict format, va_list arg);
Beschreibung
Ersetzt vfprintf, vfwprintf und fügt Sicherheitserweiterungen hinzu.
Die v...printf_s-Funktionen können als alternative Eintrittspunkte für die ...printf_s-Funktionen betrachtet werden. Sie verhalten sich genau wie ihre ...printf_s-Entsprechungen, akzeptieren jedoch einen Zeiger auf eine Argumentliste statt der Argumentliste selbst.
vfprintf_s entspricht vfprintf, vfwprintf, fügt aber Laufzeiteinschränkungen bezüglich der Gültigkeit von stream, format und der Elemente in arg hinzu, die einem %s-Formatbezeichner entsprechen (dürfen keine Null-Zeiger sein).
vfprintf_s akzeptiert einen Zeiger auf eine Reihe von Argumenten, ordnet jedem Argument einen Formatbezeichner aus dem String zu, auf den format zeigt, und schreibt die formatierten Daten in einen Stream. Die Anzahl der Formatbezeichner in der Argumentliste (arg) muss gleich der Anzahl der Elemente sein.
Rückgabewert
Bei erfolgreicher Ausführung gibt vfprintf_s die Anzahl der ausgegebenen Zeichen zurück.
Bei einem Fehler wird ein negativer Wert zurückgegeben.
Beispiel
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> FILE *fp; int vfpf(char *fmt, ...) { va_list argptr; int cnt; va_start(argptr, fmt); cnt = vfprintf_s(fp, fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber = 30; float fnumber = 90.0; char string[4] = "abc"; fp = tmpfile(); if (fp == NULL) { perror("tmpfile() call"); exit(1); } vfpf("%d %f %s", inumber, fnumber, string); rewind(fp); fscanf_s(fp,"%d %f %s", &inumber, &fnumber, string); printf_s("%d %f %s\n", inumber, fnumber, string); fclose(fp); return 0; }
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
vfprintf_s |
+ |
+ |
+ |
+ |
vfwprintf_s |
+ |
+ |
+ |