wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
|
Definiert in Header
<wchar.h>
|
||
| (1) | ||
|
int
wprintf
(
const
wchar_t
*
format, ...
)
;
|
(seit C95)
(bis C99) |
|
|
int
wprintf
(
const
wchar_t
*
restrict
format, ...
)
;
|
(seit C99) | |
| (2) | ||
|
int
fwprintf
(
FILE
*
stream,
const
wchar_t
*
format, ...
)
;
|
(seit C95)
(bis C99) |
|
|
int
fwprintf
(
FILE
*
restrict
stream,
const wchar_t * restrict format, ... ) ; |
(seit C99) | |
| (3) | ||
|
int
swprintf
(
wchar_t
*
buffer,
size_t
bufsz,
const wchar_t * format, ... ) ; |
(seit C95)
(bis C99) |
|
|
int
swprintf
(
wchar_t
*
restrict
buffer,
size_t
bufsz,
const wchar_t * restrict format, ... ) ; |
(seit C99) | |
|
int
wprintf_s
(
const
wchar_t
*
restrict
format, ...
)
;
|
(4) | (seit C11) |
|
int
fwprintf_s
(
FILE
*
restrict
stream,
const wchar_t * restrict format, ... ) ; |
(5) | (seit C11) |
|
int
swprintf_s
(
wchar_t
*
restrict
buffer, rsize_t bufsz,
const wchar_t * restrict format, ... ) ; |
(6) | (seit C11) |
|
int
snwprintf_s
(
wchar_t
*
restrict
s, rsize_t n,
const wchar_t * restrict format, ... ) ; |
(7) | (seit C11) |
Lädt die Daten von den angegebenen Speicherorten, konvertiert sie in entsprechende Breitzeichenketten und schreibt die Ergebnisse in verschiedene Senken.
-
-
der Konvertierungsspezifizierer
%nist in format vorhanden -
eines der Argumente, die
%sentsprechen, ist ein Nullzeiger - format oder buffer ist ein Nullzeiger
- bufsz ist null oder größer als RSIZE_MAX / sizeof ( wchar_t )
- Kodierungsfehler in einem der String- und Zeichenkonvertierungsspezifizierer auftreten
-
(nur für
swprintf_s) die Anzahl der zu schreibenden Breitzeichen, einschließlich des Nullzeichens, würde bufsz überschreiten.
-
der Konvertierungsspezifizierer
-
Wie bei allen grenzprüfenden Funktionen sind
wprintf_s,fwprintf_s,swprintf_sundsnwprintf_snur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <stdio.h> eingebunden wird.
Inhaltsverzeichnis |
Parameter
| stream | - | Ausgabedateistream, in den geschrieben wird |
| buffer | - | Zeiger auf eine Breitzeichen-Zeichenkette, in die geschrieben wird |
| bufsz | - | bis zu bufsz - 1 Breitzeichen können geschrieben werden, plus den Nullterminator |
| format | - | Zeiger auf eine nullterminierte Breitzeichen-Zeichenkette, die angibt, wie die Daten zu interpretieren sind |
| ... | - | Argumente, die die auszugebenden Daten spezifizieren. Wenn ein Argument nach Standardargument-Promotions nicht dem vom entsprechenden Konvertierungsspezifizierer erwarteten Typ entspricht, oder wenn weniger Argumente vorhanden sind als von format benötigt, ist das Verhalten undefiniert. Wenn mehr Argumente vorhanden sind als von format benötigt, werden die überzähligen Argumente ausgewertet und ignoriert. |
Die
Format
-Zeichenkette besteht aus gewöhnlichen Breitzeichen (außer
%
), die unverändert in den Ausgabestrom kopiert werden, und Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat folgendes Format:
-
-
Einleitendes
%Zeichen.
-
Einleitendes
-
- (optional) ein oder mehrere Flags, die das Verhalten der Konvertierung modifizieren:
-
-
-: das Ergebnis der Konvertierung wird innerhalb des Feldes linksbündig ausgerichtet (standardmäßig ist es rechtsbündig). -
+: das Vorzeichen von vorzeichenbehafteten Konvertierungen wird immer dem Ergebnis vorangestellt (standardmäßig wird das Minus nur bei negativen Ergebnissen vorangestellt). -
space
: wenn das Ergebnis einer vorzeichenbehafteten Konvertierung nicht mit einem Vorzeichen beginnt oder leer ist, wird ein Leerzeichen dem Ergebnis vorangestellt. Wird ignoriert, wenn das
+Flag vorhanden ist. -
#: alternative Form der Konvertierung wird durchgeführt. Siehe die nachfolgende Tabelle für genaue Auswirkungen, andernfalls ist das Verhalten undefiniert. -
0: für Ganzzahl- und Gleitkommazahl-Konvertierungen werden führende Nullen zum Auffüllen des Feldes verwendet statt space Zeichen. Für Ganzzahlen wird es ignoriert, wenn die Genauigkeit explizit angegeben ist. Für andere Konvertierungen führt die Verwendung dieses Flags zu undefiniertem Verhalten. Wird ignoriert, wenn das-Flag vorhanden ist.
-
-
-
(optional)
Ganzzahlwert oder
*, der die minimale Feldbreite angibt. Das Ergebnis wird bei Bedarf auf der linken Seite (bei rechtsbündiger Ausrichtung) oder auf der rechten Seite (bei linksbündiger Ausrichtung) mit Leerzeichen aufgefüllt (standardmäßig). Falls*verwendet wird, wird die Breite durch ein zusätzliches Argument vom Typ int angegeben, das vor dem zu konvertierenden Argument und dem die Genauigkeit liefernden Argument (falls vorhanden) erscheint. Wenn der Wert des Arguments negativ ist, führt dies zur Angabe des--Flags und einer positiven Feldbreite (Hinweis: Dies ist die minimale Breite: Der Wert wird niemals abgeschnitten.).
-
(optional)
Ganzzahlwert oder
-
-
(optional)
.gefolgt von einer Ganzzahl oder*, oder keines von beiden, was die Präzision der Konvertierung spezifiziert. Falls*verwendet wird, wird die Präzision durch ein zusätzliches Argument vom Typ int angegeben, das vor dem zu konvertierenden Argument erscheint, aber nach dem Argument, das die minimale Feldbreite liefert, falls eines angegeben wurde. Wenn der Wert dieses Arguments negativ ist, wird er ignoriert. Wenn weder eine Zahl noch*verwendet wird, wird die Präzision als Null angenommen. Siehe die nachfolgende Tabelle für die genauen Auswirkungen der Präzision .
-
(optional)
-
- (optional) Längenmodifikator der die Größe des Arguments spezifiziert (in Kombination mit dem Konvertierungsformat-Spezifizierer bestimmt er den Typ des entsprechenden Arguments).
-
- Konvertierungsformat-Spezifizierer.
Die folgenden Formatbezeichner sind verfügbar:
| Konvertierungsspezifizierer | Erklärung |
Erwarteter
Argumenttyp |
||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Längenmodifikator→ | hh | h | keine | l | ll | j | z | t | L | |
| Nur verfügbar seit C99→ | Ja | Ja | Ja | Ja | Ja | |||||
%
|
Schreibt ein literales
%
. Die vollständige Konvertierungsspezifikation muss
%%
lauten.
|
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 eine Zeichenkette .
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
d
i
|
Wandelt einen vorzeichenbehafteten Integer in die Dezimaldarstellung [-]dddd um.
|
signed
char
|
short
|
int
|
long
|
long
long
|
※
|
N/A | ||
o
|
Konvertiert eine vorzeichenlose Ganzzahl in die Oktaldarstellung oooo .
|
unsigned
char
|
unsigned
short
|
unsigned
int
|
unsigned
long
|
unsigned
long
long
|
vorzeichenlose Version von
ptrdiff_t
|
N/A | ||
x
X
|
Wandelt eine vorzeichenlose Ganzzahl in die hexadezimale Darstellung hhhh um.
|
N/A | ||||||||
u
|
Wandelt eine unsigned integer in die Dezimaldarstellung dddd um.
|
N/A | ||||||||
f
F
(C99)
|
Wandelt eine Gleitkommazahl in die Dezimalschreibweise im Format [-]ddd.ddd um.
|
N/A | N/A |
double
|
double
(C99)
|
N/A | N/A | N/A | N/A |
long
double
|
e
E
|
Wandelt eine Gleitkommazahl in die dezimale Exponentenschreibweise um.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
a
A
(C99) |
Wandelt eine Gleitkommazahl in die hexadezimale Exponentenschreibweise um.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
g
G
|
Konvertiert eine Gleitkommazahl in Dezimal- oder Exponentenschreibweise, 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 geschriebenen Zeichen durch diesen Funktionsaufruf zurück.
|
signed
char
*
|
short
*
|
int
*
|
long
*
|
long
long
*
|
intmax_t
*
|
※
|
N/A | |
p
|
Schreibt eine implementierungsdefinierte Zeichenfolge, die einen Zeiger definiert. |
N/A | N/A |
void
*
|
N/A | N/A | N/A | N/A | N/A | N/A |
| Hinweise | ||||||||||
|
Die Gleitkomma-Konvertierungsfunktionen konvertieren Unendlich zu
Keine-Zahl wird zu
Die Konvertierungen
Der Konvertierungsspezifizierer zur Ausgabe von char , unsigned char , signed char , short und unsigned short erwartet höherstufige Typen von Standardargument-Promotions , aber vor der Ausgabe wird sein Wert zu char , unsigned char , signed char , short und unsigned short konvertiert. Es ist sicher, Werte dieser Typen zu übergeben, aufgrund der Promotion, die beim Aufruf einer variadischen Funktion stattfindet.
Die korrekten Konvertierungsspezifikationen für die festbreiten Zeichentypen (
int8_t
usw.) sind im Header
<inttypes.h>
definiert (obwohl
PRIdMAX
,
PRIuMAX
usw. synonym mit
Der speicher-schreibende 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
Hinweise
Während schmale Zeichenketten
snprintf
bereitstellen, was die Bestimmung der benötigten Ausgabepuffergröße ermöglicht, existiert kein Äquivalent für breite Zeichenketten
(bis
snwprintf_s
)
(seit C11)
, und um die Puffergröße zu bestimmen, muss das Programm möglicherweise
swprintf
aufrufen, den Rückgabewert prüfen und einen größeren Puffer allozieren, um es erneut zu versuchen, bis es erfolgreich ist.
snwprintf_s
, im Gegensatz zu
swprintf_s
, wird das Ergebnis kürzen, um in das Array zu passen, auf das
buffer
zeigt, obwohl Kürzung von den meisten grenzprüfenden Funktionen als Fehler behandelt wird.
Beispiel
#include <locale.h> #include <wchar.h> int main(void) { char narrow_str[] = "z\u00df\u6c34\U0001f34c"; // or "zß水🍌" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator setlocale(LC_ALL, "en_US.utf8"); swprintf(warr, sizeof warr / sizeof* warr, L"Converted from UTF-8: '%s'", narrow_str); wprintf(L"%ls\n", warr); }
Ausgabe:
Converted from UTF-8: 'zß水🍌'
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.29.2.1 Die fwprintf-Funktion (S.: TBD)
-
- 7.29.2.3 Die swprintf-Funktion (S.: TBD)
-
- 7.29.2.11 Die wprintf-Funktion (S.: TBD)
-
- K.3.9.1.1 Die fwprintf_s-Funktion (S.: TBD)
-
- K.3.9.1.4 Die swprintf_s-Funktion (S.: TBD)
-
- K.3.9.1.13 Die wprintf_s-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.29.2.1 Die fwprintf-Funktion (S.: TBD)
-
- 7.29.2.3 Die swprintf-Funktion (S.: TBD)
-
- 7.29.2.11 Die wprintf-Funktion (S.: TBD)
-
- K.3.9.1.1 Die fwprintf_s-Funktion (S.: TBD)
-
- K.3.9.1.4 Die swprintf_s-Funktion (S.: TBD)
-
- K.3.9.1.13 Die wprintf_s-Funktion (S.: TBD)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.29.2.1 Die fwprintf-Funktion (S: 403-410)
-
- 7.29.2.3 Die swprintf-Funktion (S: 416)
-
- 7.29.2.11 Die wprintf-Funktion (S: 421)
-
- K.3.9.1.1 Die fwprintf_s-Funktion (S: 628)
-
- K.3.9.1.4 Die swprintf_s-Funktion (S: 630-631)
-
- K.3.9.1.13 Die wprintf_s-Funktion (S: 637-638)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.24.2.1 Die fwprintf-Funktion (S. 349-356)
-
- 7.24.2.3 Die swprintf-Funktion (S. 362)
-
- 7.24.2.11 Die wprintf-Funktion (S. 366)
Siehe auch
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
gibt formatierte Ausgabe an
stdout
, einen Dateistrom oder einen Puffer aus
(Funktion) |
|
(C95)
(C95)
(C95)
(C11)
(C11)
(C11)
(C11)
|
gibt formatierte Breitzeichen-Ausgabe an
stdout
, einen Dateistrom
oder einen Puffer unter Verwendung einer variablen Argumentenliste aus (Funktion) |
|
(C95)
|
schreibt eine Breitzeichen-Zeichenkette in einen Dateistrom
(Funktion) |
|
C++-Dokumentation
für
wprintf
,
fwprintf
,
swprintf
|
|