vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
| Definiert in Header <wchar.h>
|
||
int vwprintf( const wchar_t* format, va_list vlist );
|
(1) | (seit C95) (bis C99) |
int vwprintf( const wchar_t* restrict format, va_list vlist );
|
(seit C99) | |
int vfwprintf( FILE* stream, const wchar_t* format, va_list vlist );
|
(2) | (seit C95) (bis C99) |
int vfwprintf( FILE* restrict stream,
const wchar_t* restrict format, va_list vlist );
|
(seit C99) | |
int vswprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, va_list vlist );
|
(3) | (seit C95) (bis C99) |
int vswprintf( wchar_t* restrict buffer, size_t bufsz,
const wchar_t* restrict format, va_list vlist );
|
(seit C99) | |
int vwprintf_s( const wchar_t* restrict format, va_list vlist);
|
(4) | (seit C11) |
int vfwprintf_s( FILE* restrict stream,
const wchar_t* restrict format, va_list vlist);
|
(5) | (seit C11) |
int vswprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, va_list vlist);
|
(6) | (seit C11) |
int vsnwprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, va_list vlist);
|
(7) | (seit C11) |
Lädt die Daten von den durch vlist definierten Speicherorten, konvertiert sie in Breitzeichen-Äquivalente und schreibt die Ergebnisse in verschiedene Ausgabeziele.
stream.buffer. Es werden maximal bufsz - 1 Breitzeichen geschrieben, gefolgt von einem abschließenden Null-Breitzeichen. Der resultierende Breitzeichen-String wird mit einem Null-Breitzeichen abgeschlossen, es sei denn, bufsz ist Null.- der Konvertierungsspezifizierer
%nist informat vorhanden
- eines der Argumente, die
%sentsprechen, ist ein Nullzeiger formatoderbufferist ein Nullzeigerbufszist Null oder größer alsRSIZE_MAX / sizeof(wchar_t)- Kodierungsfehler treten bei allen Konvertierungsspezifizierern für Zeichenketten und Zeichen auf
- (nur für
vswprintf_s) die Zeichenkette, die inbuffergespeichert werden soll (einschließlich des abschließenden Null-Breitzeichens), würdebufszüberschreiten.
buffer zeigt.vwprintf_s, vfwprintf_s, vswprintf_s und vsnwprintf_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ auf die ganzzahlige Konstante 1 setzt, bevor er <stdio.h> einbindet.Parameter
| stream | - | Ausgabe-Breitzeichenstrom, in den geschrieben wird |
| buffer | - | Zeiger auf einen Breitzeichen-String, in den geschrieben wird |
| bufsz | - | maximale Anzahl zu schreibender Breitzeichen |
| format | - | Zeiger auf einen nullterminierten Breitzeichen-String, der angibt, wie die Daten zu interpretieren sind |
| vlist | - | Liste variabler Argumente, die die zu druckenden Daten enthält. |
Der format-String besteht aus gewöhnlichen Breitzeichen (außer %), die unverändert in den Ausgabestrom kopiert werden, sowie Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat das folgende Format:
- Einleitendes
%-Zeichen.
- Einleitendes
- (optional) eines oder mehrere Flags, die das Verhalten der Konvertierung modifizieren:
-: Das Ergebnis der Konvertierung wird linksbündig im Feld ausgerichtet (standardmäßig ist es rechtsbündig).+: Das Vorzeichen von vorzeichenbehafteten Konvertierungen wird dem Konvertierungsergebnis immer vorangestellt (standardmäßig wird dem Ergebnis nur dann ein Minus vorangestellt, wenn es negativ ist).- space: Wenn das Ergebnis einer vorzeichenbehafteten Konvertierung nicht mit einem Vorzeichen beginnt oder leer ist, wird dem Ergebnis ein Leerzeichen vorangestellt. Es wird ignoriert, wenn das
+-Flag vorhanden ist. #: Die alternative Form der Konvertierung wird durchgeführt. Siehe Tabelle unten für genaue Auswirkungen, andernfalls ist das Verhalten undefiniert.0: Bei Ganzzahl- und Gleitkommazahlen-Konvertierungen werden führende Nullen anstelle von space-Zeichen zum Auffüllen des Feldes verwendet. Bei Ganzzahlen wird es ignoriert, wenn die Genauigkeit explizit angegeben ist. Bei anderen Konvertierungen führt die Verwendung dieses Flags zu undefiniertem Verhalten. Es wird ignoriert, wenn das--Flag vorhanden ist.
- (optional) Ganzzahlwert oder
*, der die minimale Feldbreite angibt. Das Ergebnis wird bei Bedarf mit space-Zeichen aufgefüllt, bei Rechtsbündigkeit links, bei Linksbündigkeit rechts. Wenn*verwendet wird, wird die Breite durch ein zusätzliches Argument vom Typintangegeben, das vor dem zu konvertierenden Argument und dem Argument, das die Genauigkeit angibt (falls vorhanden), erscheint. Wenn der Wert des Arguments negativ ist, ergibt sich daraus das--Flag und eine positive Feldbreite (Hinweis: Dies ist die Mindestbreite. Der Wert wird niemals abgeschnitten.).
- (optional) Ganzzahlwert oder
- (optional)
.gefolgt von einer Ganzzahl oder*, oder keines von beidem, das die Genauigkeit der Konvertierung angibt. Wenn*verwendet wird, wird die Genauigkeit durch ein zusätzliches Argument vom Typintangegeben, das vor dem zu konvertierenden Argument, aber nach dem Argument erscheint, das die minimale Feldbreite angibt (falls vorhanden). Wenn der Wert dieses Arguments negativ ist, wird er ignoriert. Wenn weder eine Zahl noch*verwendet wird, wird die Genauigkeit als Null angenommen. Siehe Tabelle unten für die genauen Auswirkungen der Genauigkeit.
- (optional)
- (optional) Längenmodifikator, der die Größe des Arguments angibt (in Kombination mit dem Konvertierungsformat-Spezifizierer gibt er den Typ des entsprechenden Arguments an).
- Konvertierungsformat-Spezifizierer.
Die folgenden Format-Spezifizierer sind verfügbar:
| Konvertierungs- Spezifizierer |
Erklärung | Erwarteter Argumenttyp | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Längenmodifikator→ | hh | h | none | l | ll | j | z | t | L | |
| Nur seit C99 verfügbar→ | Ja | Ja | Ja | Ja | Ja | |||||
%
|
Schreibt literales %. Die vollständige Konvertierungsspezifikation muss %% sein.
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
Schreibt ein einzelnes Zeichen.
|
N/A | N/A | int |
wint_t |
N/A | N/A | N/A | N/A | N/A |
s
|
Schreibt einen Zeichen-String.
|
N/A | N/A | char* |
wchar_t* |
N/A | N/A | N/A | N/A | N/A |
di
|
Konvertiert eine vorzeichenbehaftete Ganzzahl in eine Dezimaldarstellung [-]dddd.
|
signed char |
short |
int |
long |
long long |
intmax_t |
※ |
ptrdiff_t |
N/A |
bB (optional)
(C23) |
Konvertiert eine vorzeichenlose Ganzzahl in eine binäre Darstellung bbbb.
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
vorzeichenlose Version von ptrdiff_t |
N/A |
o
|
Konvertiert eine vorzeichenlose Ganzzahl in eine oktale Darstellung oooo.
|
N/A | ||||||||
xX
|
Konvertiert eine vorzeichenlose Ganzzahl in eine hexadezimale Darstellung hhhh.
|
N/A | ||||||||
u
|
Konvertiert eine vorzeichenlose Ganzzahl in eine dezimale Darstellung dddd.
|
N/A | ||||||||
fF (C99)
|
Konvertiert eine Gleitkommazahl in die Dezimalschreibweise im Stil [-]ddd.ddd.
|
N/A | N/A | double |
double (C99) |
N/A | N/A | N/A | N/A | long double |
eE
|
Konvertiert eine Gleitkommazahl in die dezimale Exponentenschreibweise.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
aA
(C99) |
Konvertiert eine Gleitkommazahl in die hexadezimale Exponentenschreibweise.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
gG
|
Konvertiert eine Gleitkommazahl in eine Dezimal- oder Dezimalexponentenschreibweise, abhängig vom Wert und der Genauigkeit.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
n
|
Gibt die Anzahl der bisher durch diesen Aufruf der Funktion geschriebenen Zeichen zurück.
|
signed char* |
short* |
int* |
long* |
long long* |
intmax_t * |
※ |
ptrdiff_t * |
N/A |
p
|
Schreibt eine implementierungsdefinierte Zeichensequenz, die einen Zeiger definiert. |
N/A | N/A | void* |
N/A | N/A | N/A | N/A | N/A | N/A |
| Anmerkungen | ||||||||||
|
Die Gleitkomma-Konvertierungsfunktionen konvertieren Unendlich in NaN wird in Die Konvertierungen Der Konvertierungsspezifizierer, der zum Drucken von Die korrekten Konvertierungsspezifizierer für die Ganzzahltypen mit fester Breite (int8_t, usw.) sind im Header <inttypes.h> definiert (obwohl PRIdMAX, PRIuMAX, usw. synonym zu Der speicherausgebende Konvertierungsspezifizierer Es gibt einen Sequenzpunkt nach der Aktion jedes Konvertierungsspezifizierers; dies erlaubt das Speichern mehrerer Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert. | ||||||||||
Rückgabewert
bufsz-Begrenzung abgeschnitten wird, gibt die Funktion die Gesamtzahl der Zeichen zurück (ohne das abschließende Null-Breitzeichen), die geschrieben worden wären, wenn die Begrenzung nicht bestünde.buffer geschriebenen Breitzeichen (ohne das abschließende Null-Breitzeichen, das immer geschrieben wird, solange buffer kein Nullzeiger ist und bufsz nicht Null und nicht größer als RSIZE_MAX/sizeof(wchar_t) ist), oder Null bei Verstößen gegen Laufzeitbeschränkungen und ein negativer Wert bei Kodierungsfehlern.buffer kein Nullzeiger ist und bufsz nicht Null und nicht größer als RSIZE_MAX/sizeof(wchar_t) ist), die in buffer geschrieben worden wären, wenn bufsz ignoriert worden wäre, oder ein negativer Wert, wenn ein Verstoß gegen Laufzeitbeschränkungen oder ein Kodierungsfehler aufgetreten ist.Anmerkungen
Alle diese Funktionen rufen va_arg mindestens einmal auf; der Wert von arg ist nach der Rückgabe unbestimmt. Diese Funktionen rufen va_end nicht auf; dies muss vom Aufrufer erledigt werden.
Während schmale Zeichenketten vsnprintf bereitstellen, das die Bestimmung der erforderlichen Ausgabepuffergröße ermöglicht, gibt es kein Äquivalent für Breitzeichenketten (bis C11's vsnwprintf_s), und um die Puffergröße zu bestimmen, muss das Programm möglicherweise vswprintf aufrufen, den Rückgabewert überprüfen und einen größeren Puffer neu zuweisen, bis es erfolgreich ist.
vsnwprintf_sim Gegensatz zu vswprintf_s das Ergebnis abschneiden, damit es in das durch buffer angegebene Array passt, obwohl das Abschneiden von den meisten grenzgeprüften Funktionen als Fehler behandelt wird.
Beispiel
#include <locale.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
void debug_wlog(const wchar_t* fmt, ...)
{
struct timespec ts;
timespec_get(&ts, TIME_UTC);
char time_buf[100];
size_t rc = strftime(time_buf, sizeof time_buf, "%D %T", gmtime(&ts.tv_sec));
snprintf(time_buf + rc, sizeof time_buf - rc, ".%06ld UTC", ts.tv_nsec / 1000);
va_list args;
va_start(args, fmt);
wchar_t buf[1024];
int rc2 = vswprintf(buf, sizeof buf / sizeof *buf, fmt, args);
va_end(args);
if (rc2 > 0)
wprintf(L"%s [debug]: %ls\n", time_buf, buf);
else
wprintf(L"%s [debug]: (string too long)\n", time_buf);
}
int main(void)
{
setlocale(LC_ALL, "");
debug_wlog(L"Logging, %d, %d, %d", 1, 2, 3);
}
Mögliche Ausgabe:
02/20/15 22:12:38.476575 UTC [debug]: Logging, 1, 2, 3
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
- 7.29.2.5 Die Funktion vfwprintf (S.: TBD)
- 7.29.2.7 Die Funktion vswprintf (S.: TBD)
- 7.29.2.9 Die Funktion vwprintf (S.: TBD)
- K.3.9.1.6 Die Funktion vfwprintf_s (S.: TBD)
- K.3.9.1.8 Die Funktion vsnwprintf_s (S.: TBD)
- K.3.9.1.9 Die Funktion vswprintf_s (S.: TBD)
- K.3.9.1.11 Die Funktion vwprintf_s (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
- 7.29.2.5 Die Funktion vfwprintf (S.: TBD)
- 7.29.2.7 Die Funktion vswprintf (S.: TBD)
- 7.29.2.9 Die Funktion vwprintf (S.: TBD)
- K.3.9.1.6 Die Funktion vfwprintf_s (S.: TBD)
- K.3.9.1.8 Die Funktion vsnwprintf_s (S.: TBD)
- K.3.9.1.9 Die Funktion vswprintf_s (S.: TBD)
- K.3.9.1.11 Die Funktion vwprintf_s (S.: TBD)
- C11-Standard (ISO/IEC 9899:2011):
- 7.29.2.5 Die Funktion vfwprintf (S.: 417-418)
- 7.29.2.7 Die Funktion vswprintf (S.: 419)
- 7.29.2.9 Die Funktion vwprintf (S.: 420)
- K.3.9.1.6 Die Funktion vfwprintf_s (S.: 632)
- K.3.9.1.8 Die Funktion vsnwprintf_s (S.: 633-634)
- K.3.9.1.9 Die Funktion vswprintf_s (S.: 634-635)
- K.3.9.1.11 Die Funktion vwprintf_s (S.: 636)
- C99-Standard (ISO/IEC 9899:1999):
- 7.24.2.5 Die Funktion vfwprintf (S.: 363)
- 7.24.2.7 Die Funktion vswprintf (S.: 364)
- 7.24.2.9 Die Funktion vwprintf (S.: 365)
Siehe auch
(C99)(C11)(C11)(C11)(C11) |
gibt formatierte Ausgabe auf stdout, einen Dateistrom oder einen Puffer aus unter Verwendung einer variablen Argumentliste (Funktion) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
gibt formatierte Breitzeichen-Ausgabe auf stdout, einen Dateistrom oder einen Puffer aus (Funktion) |
C++-Dokumentation für vwprintf, vfwprintf, vswprintf
| |