wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
| Definiert in Header <wchar.h>
|
||
int wprintf( const wchar_t* format, ... );
|
(1) | (seit C95) (bis C99) |
int wprintf( const wchar_t* restrict format, ... );
|
(seit C99) | |
int fwprintf( FILE* stream, const wchar_t* format, ... );
|
(2) | (seit C95) (bis C99) |
int fwprintf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(seit C99) | |
int swprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, ... );
|
(3) | (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 Orten, konvertiert sie in breite Zeichenkettenäquivalente und schreibt die Ergebnisse in verschiedene Ziele.
stream.bufsz größer als Null ist, schreibt die Ergebnisse in eine breite Zeichenkette buffer. Es werden höchstens bufsz - 1 breite Zeichen gefolgt von einem Null-Breitzeichen geschrieben. Wenn bufsz Null ist, wird nichts geschrieben (und buffer kann ein Nullzeiger sein).- Das Konvertierungsspezifikationszeichen
%nist informat - vorhanden. Eines der Argumente, die
%sentsprechen, ist ein Nullzeiger formatoderbufferist ein Nullzeigerbufszist Null oder größer alsRSIZE_MAX / sizeof(wchar_t)- Bei Zeichenketten- und Zeichen-Konvertierungsspezifikationen treten Kodierungsfehler auf.
- (nur für
swprintf_s) Die Anzahl der zu schreibenden Breitzeichen, einschließlich der Null, würdebufszüberschreiten.
s gegebene Array zu passen.wprintf_s, fwprintf_s, swprintf_s und snwprintf_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ auf die ganzzahlige Konstante 1 setzt, bevor er <stdio.h> einbindet.Parameter
| stream | - | Ausgabe-Dateistrom zum Schreiben |
| buffer | - | Zeiger auf eine breite Zeichenkette zum Schreiben |
| bufsz | - | bis zu bufsz - 1 breite Zeichen können geschrieben werden, plus der Null-Terminator
|
| format | - | Zeiger auf eine nullterminierte breite Zeichenkette, die angibt, wie die Daten zu interpretieren sind |
| ... | - | Argumente, die die zu druckenden Daten angeben. Wenn irgendein Argument nach den Standard-Argumentpromotionen nicht dem Typ entspricht, der vom entsprechenden Konvertierungsspezifikator erwartet wird, oder wenn weniger Argumente als von format benötigt vorhanden sind, ist das Verhalten undefiniert. Wenn mehr Argumente als von format benötigt vorhanden sind, werden die überzähligen Argumente ausgewertet und ignoriert.
|
Die format-Zeichenkette besteht aus gewöhnlichen breiten Zeichen (außer %), die unverändert in den Ausgabestrom kopiert werden, und Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat das folgende Format:
- Einführendes
%Zeichen.
- Einführendes
- (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 signed-Konvertierungen wird immer dem Ergebnis der Konvertierung vorangestellt (standardmäßig wird dem Ergebnis nur dann ein Minus vorangestellt, wenn es negativ ist).- Leerzeichen: Wenn das Ergebnis einer signed-Konvertierung nicht mit einem Vorzeichen beginnt oder leer ist, wird ein Leerzeichen vorangestellt. Es wird ignoriert, wenn das
+-Flag vorhanden ist. #: Es wird die alternative Form der Konvertierung durchgeführt. Siehe untenstehende Tabelle für genaue Auswirkungen, andernfalls ist das Verhalten undefiniert.0: Bei Ganzzahl- und Gleitkommazahlen-Konvertierungen werden führende Nullen anstelle von Leerzeichen 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 Leerzeichen aufgefüllt, links, wenn rechtsbündig, oder rechts, wenn linksbündig. Wenn*verwendet wird, wird die Breite durch ein zusätzliches Argument vom Typintangegeben, das vor dem zu konvertierenden Argument und gegebenenfalls dem Argument, das die Genauigkeit liefert, erscheint. Wenn der Wert des Arguments negativ ist, führt dies zum angegebenen--Flag und positiver Feldbreite (Hinweis: Dies ist die Mindestbreite: Der Wert wird niemals abgeschnitten).
- (optional) Ganzzahlwert oder
- (optional)
.gefolgt von einer ganzen Zahl oder*, oder keins von beiden, 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, das die minimale Feldbreite liefert, falls vorhanden, erscheint. Ist der Wert dieses Arguments negativ, wird es ignoriert. Wenn weder eine Zahl noch*verwendet wird, wird die Genauigkeit als Null angenommen. Siehe untenstehende Tabelle für die genauen Auswirkungen der Genauigkeit.
- (optional)
- (optional) Längenmodifikator, der die Größe des Arguments angibt (in Kombination mit dem Konvertierungsformatspezifikator gibt er den Typ des entsprechenden Arguments an).
- Konvertierungsformatspezifikator.
Die folgenden Formatspezifikatoren sind verfügbar:
| Konvertierungs-
Spezifikator |
Erklärung | Erwarteter
Argumenttyp | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Längenmodifikator→ | hh | h | kein | l | ll | j | z | t | L | |
| Nur verfügbar seit C99→ | Ja | Ja | Ja | Ja | Ja | |||||
%
|
Schreibt Literal %. 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 eine Zeichenkette.
|
N/A | N/A | char* |
wchar_t* |
N/A | N/A | N/A | N/A | N/A |
di
|
Konvertiert eine signed Ganzzahl in dezimale Darstellung [-]dddd.
|
signed char |
short |
int |
long |
long long |
intmax_t |
※ |
ptrdiff_t |
N/A |
bB (optional)
(C23) |
Konvertiert eine unsigned Ganzzahl in binäre Darstellung bbbb.
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
unsigned Version von ptrdiff_t |
N/A |
o
|
Konvertiert eine unsigned Ganzzahl in oktale Darstellung oooo.
|
N/A | ||||||||
xX
|
Konvertiert eine unsigned Ganzzahl in hexadezimale Darstellung hhhh.
|
N/A | ||||||||
u
|
Konvertiert eine unsigned Ganzzahl in dezimale Darstellung dddd.
|
N/A | ||||||||
fF (C99)
|
Konvertiert Gleitkommazahl in die Dezimalnotation im Stil [-]ddd.ddd.
|
N/A | N/A | double |
double (C99) |
N/A | N/A | N/A | N/A | long double |
eE
|
Konvertiert Gleitkommazahl in die dezimale Exponentennotation.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
aA
(C99) |
Konvertiert Gleitkommazahl in die hexadezimale Exponentennotation.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
gG
|
Konvertiert Gleitkommazahl in dezimale oder dezimale Exponentennotation, 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 Aufruf der Funktion zurück.
|
signed char* |
short* |
int* |
long* |
long long* |
intmax_t * |
※ |
ptrdiff_t * |
N/A |
p
|
Schreibt eine implementationsdefinierte 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 Konvertierungsspezifikator, der zum Drucken von Die korrekten Konvertierungsspezifikationen für die Zeichentypen mit fester Breite (int8_t, usw.) sind im Header <inttypes.h> definiert (obwohl PRIdMAX, PRIuMAX, usw. synonym mit Der speicher-schreibende Konvertierungsspezifikator Es gibt einen Sequenzpunkt nach der Aktion jedes Konvertierungsspezifikators; dies erlaubt das Speichern mehrerer Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert. | ||||||||||
Rückgabewert
bufsz war (auch wenn bufsz Null ist).buffer geschrieben wurden. Gibt einen negativen Wert bei Kodierungsfehlern und Überlauf zurück. Gibt Null bei allen anderen Fehlern zurück.buffer geschrieben worden wären, wenn bufsz ausreichend groß gewesen wäre, oder ein negativer Wert, wenn ein Fehler auftritt. (d.h., der Schreibvorgang war erfolgreich und vollständig nur, wenn der Rückgabewert nicht negativ und kleiner als bufsz ist)Anmerkungen
Während schmale Zeichenketten snprintf bereitstellen, was es ermöglicht, die erforderliche Ausgabepuffergröße zu bestimmen, gibt es 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 überprüfen, einen größeren Puffer neu zuweisen und es erneut versuchen, bis es erfolgreich ist.
snwprintf_s, anders als swprintf_s, wird das Ergebnis abschneiden, um in das durch buffer gegebene Array zu passen, obwohl das Abschneiden von den meisten grenzgeprüften 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 in stdout, einen Dateistrom oder einen Puffer aus (Funktion) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
gibt formatierte Breitzeichen-Ausgabe in stdout, einen Dateistrom oder einen Puffer unter Verwendung einer variablen Argumentliste aus (Funktion) |
(C95) |
schreibt eine breite Zeichenkette in einen Dateistrom (Funktion) |
C++-Dokumentation für wprintf, fwprintf, swprintf
| |