vsnprintf_s, vsnwprintf_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 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; 
}

Siehe auch