Formatspezifikationssyntax: printf und wprintf Funktionen

Die verschiedenen printf- und wprintf-Funktionen nehmen eine Formatzeichenfolge sowie optionale Argumente an und generieren eine formatierte Zeichenfolgensequenz für die Ausgabe. Die Formatzeichenfolge enthält 0 oder mehr Anweisungen, die entweder literale Zeichen für die Ausgabe oder codierte Konvertierungsangaben sind, die beschreiben, wie ein Argument in der Ausgabe formatiert wird. Dieser Artikel beschreibt die Syntax, die zum Codieren von Konvertierungsangaben in der Formatzeichenfolge verwendet wird. Eine Auflistung dieser Funktionen finden Sie unter Stream E/A.

Eine Konvertierungsangabe besteht aus optionalen Feldern und Pflichtfeldern in folgender Form:

%[flags][width][.precision][size]type

Jedes Feld der Konvertierungsangabe ist entweder ein Zeichen oder eine Zahl, das bzw. die eine bestimmte Formatoption oder Konvertierungsspezifizierer darstellt. Das erforderliche Typfeld gibt die Art der Konvertierung an, die an einem Argument vorgenommen wird. Die optionalen Flags, Breite und Genauigkeitsfelder steuern andere Formataspekte wie führende Leerzeichen oder Nullen, Begründung und angezeigte Genauigkeit. Das Feld size gibt die Größe des verwendeten und konvertierten Arguments an.

Eine grundlegende Formatspezifikation enthält nur das Prozentzeichen und ein Typzeichen. %s gibt z.B. eine Zeichenfolgenkonvertierung an. Um ein Prozentzeichen zu drucken, verwenden Sie %%. Es wird ein ungültiger Parameterhandler aufgerufen, wenn einem Prozentzeichen ein Zeichen folgt, das keine Bedeutung für ein Formatfeld hat. Weitere Informationen finden Sie unter Parameterüberprüfung.

Wichtig

Stellen Sie für Sicherheit und Stabilität sicher, dass die Formatkonvertierungsspezifikationszeichenfolgen nicht vom Endbenutzer definiert sind. Beispiel: Ein Programm, das den Benutzer zur Eingabe eines Namens auffordert und die Eingabe in einer Zeichenfolgevariablen namens user_name speichert. Gehen Sie zum Drucken user_nameniemals wie folgt vor:

printf( user_name ); /* Danger! If user_name contains "%s", program will crash */

Sondern gehen Sie stattdessen so vor:

printf( "%s", user_name );

Hinweis

In Visual Studio 2015 wurden die printf Funktionen und scanf die Familie der Funktionen als inline und in die <stdio.h> Kopfzeilen deklariert und <conio.h> verschoben. Wenn Sie älteren Code migrieren, wird möglicherweise LNK2019 in Verbindung mit diesen Funktionen angezeigt. Weitere Informationen finden Sie unter Visual C++-Änderungsverlauf 2003 - 2015.

Typkonvertierungsspezifizierer

Das Typ-Konvertierungsspezifiziererzeichen gibt an, ob das entsprechende Argument als Zeichen, Zeichenfolge, Zeiger, ganze Zahl oder Gleitkommazahl interpretiert werden soll. Das Typzeichen ist das einzige erforderliche Konvertierungsangabenfeld und erscheint nach allen optionalen Feldern.

Die Argumente, die der Formatzeichenfolge folgen, werden nach dem entsprechenden Typzeichen und dem optionalen Größenpräfix interpretiert. Konvertierungen für Zeichentypen char und wchar_t werden mithilfe c oder C, und Single-Byte- und Multibyte- oder Breitzeichenzeichenfolgen mithilfe s oder S, je nachdem, welche Formatierungsfunktion verwendet wird, angegeben. Zeichen- und Zeichenfolgenargumente, die mithilfe von c Familienfunktionen oder familienspezifischen wprintf wchar_t wchar_t* Funktionen angegeben und s interpretiert char char* printf werden. Zeichen- und Zeichenfolgenargumente, die mithilfe von C Familienfunktionen oder familienspezifischen wprintf char char* Funktionen angegeben und S interpretiert wchar_t wchar_t* printf werden. Dieses Verhalten ist microsoftspezifisch. Aus historischen Gründen verwenden s c und verweisen die wprintf Funktionen auf wchar_t Zeichen, und C S geben Sie schmale Zeichen an.

Ganzzahlige Typen wie short, int, , long, long longund deren unsigned Varianten werden mithilfe dvon , , i, o, u, , xund .X Gleitkommatypen wie , und , werden mithilfe avon , A, , e, Ef, F, , , und g.Glong doubledoublefloat Standardmäßig werden ganzzahlige Argumente durch ein Größenpräfix geändert, und Gleitkommaargumente werden in die Eingabe umgewandelt int , und Gleitkommaargumente werden in double" umgewandelt. Bei 64-Bit-Systemen handelt es int sich um einen 32-Bit-Wert. Daher werden 64-Bit-Ganzzahlen abgeschnitten, wenn sie für die Ausgabe formatiert werden, es sei denn, ein Größenpräfix von ll oder I64 wird verwendet. Zeigertypen, die mithilfe p der Standardzeigergröße für die Plattform angegeben werden.

Hinweis

Microsoft-spezifisch:
Das Z Typzeichen und das Verhalten der cZeichen , C, sund S Typzeichen, wenn sie mit den printf Und-Funktionen wprintf verwendet werden, sind Microsoft-Erweiterungen. Der ISO C-Standard verwendet c und s konsistent für schmale Zeichen und Zeichenfolgen sowie S C für breite Zeichen und Zeichenfolgen in allen Formatierungsfunktionen.

Typenfeldzeichen

Typzeichen Argument Ausgabeformat
c Zeichen Gibt bei Verwendung mit printf-Funktionen ein Einzelbytezeichen und bei Verwendung mit wprintf-Funktionen ein Breitzeichen an.
C Zeichen Gibt bei Verwendung mit printf-Funktionen ein Breitzeichen und bei Verwendung mit wprintf-Funktionen ein Einzelbytezeichen an.
d Ganzzahl Ganze Dezimalzahl mit Vorzeichen
i Ganzzahl Ganze Dezimalzahl mit Vorzeichen
o Ganzzahl Oktale ganze Zahl ohne Vorzeichen
u Ganzzahl Ganze Dezimalzahl ohne Vorzeichen
x Ganzzahl Nicht signierte hexadezimale ganze Zahl; verwendet "abcdef".
X Ganzzahl Nicht signierte hexadezimale ganze Zahl; verwendet "ABCDEF".
e Gleitkomma Signierter Wert mit dem Format [-]d.dddde[]ddd[+-|d], wobei d eine Dezimalziffer ist, ddd ist je nach der angegebenen Genauigkeit eine oder mehrere Dezimalstellen, und dd[d] ist je nach Ausgabeformat und Größe des Exponenten zwei oder drei Dezimalstellen.
E Gleitkomma Identisch mit dem e Format, mit dem Ausnahme, dass E der Exponent nicht e eingeführt wird.
f Gleitkomma Signierter Wert mit dem Format [-]dddd ddd., wobei dddd mindestens eine Dezimalziffer ist. Die Anzahl der Ziffern vor dem Dezimaltrennzeichen ist abhängig von der Größe der Zahl, und die Anzahl der Ziffern nach dem Dezimaltrennzeichen ist abhängig von der angeforderten Genauigkeit oder standardmäßig sechs.
F Gleitkomma Identisch mit dem f Format, außer dass unendliche und NaN-Ausgabe großgeschrieben ist.
g Gleitkomma Signierte Werte werden in f oder e im Format angezeigt, je nachdem, welcher Wert für den angegebenen Wert und die Genauigkeit kompakter ist. Das e Format wird nur verwendet, wenn der Exponent des Werts kleiner als -4 oder größer als oder gleich dem Genauigkeitsargument ist. Nachfolgende Nullen werden abgeschnitten, und das Dezimaltrennzeichen wird nur angezeigt, wenn eine oder mehrere Ziffern darauf folgen.
G Gleitkomma Identisch mit dem g Format, es sei denn, es Ewird eder Exponent (sofern zutreffend) eingeführt.
a Gleitkomma Signierter hexadezimaler Gleitkommawert mit doppelter Genauigkeit, der die Form [-]0xh.hhhhp[|+-]dd aufweist, wobei h.hhhhh die Hexadezimalstellen (mit Kleinbuchstaben) der Mantissa und dd eine oder mehrere Ziffern für den Exponenten sind. Die Genauigkeit gibt die Anzahl der Ziffern nach dem Punkt an.
A Gleitkomma Signierter hexadezimaler Gleitkommawert mit doppelter Genauigkeit, der die Form [-]0Xh.hhhhP[|+-]dd hat, wobei h.hhhhh die Hexadezimalstellen (mit Großbuchstaben) der Mantissa und dd eine oder mehrere Ziffern für den Exponenten sind. Die Genauigkeit gibt die Anzahl der Ziffern nach dem Punkt an.
n Zeiger auf eine ganze Zahl Anzahl der Zeichen, die bisher erfolgreich in den Stream oder Puffer geschrieben wurden. Dieser Wert wird in der ganzen Zahl gespeichert, deren Adresse als Argument angegeben ist. Die Größe des Integers, auf den gezeigt wird, kann durch ein Präfix mit Argumentengrößenangabe gesteuert werden. Der n-Bezeichner ist standardmäßig deaktiviert. Weitere Informationen finden Sie im wichtigen Sicherheitshinweis.
p Zeigertyp Zeigt das Argument als Adresse in hexadezimalen Ziffern an.
s String Gibt bei Verwendung mit printf-Funktionen eine Einzelbyte- oder Multibyte-Zeichenfolge und bei Verwendung mit wprintf-Funktionen eine Breitzeichenfolge an. Zeichen werden bis zum ersten NULL-Zeichen oder bis zum precision-Wert angezeigt.
S String Gibt bei Verwendung mit printf-Funktionen eine Breitzeichenfolge und bei Verwendung mit wprintf-Funktionen eine Einzelbyte- oder Multibyte-Zeichenfolge an. Zeichen werden bis zum ersten NULL-Zeichen oder bis zum precision-Wert angezeigt.
Z ANSI_STRING- oder UNICODE_STRING-Struktur VS 2013 und früher
Wenn die Adresse einer ANSI_STRING Oder UNICODE_STRING Struktur als Argument übergeben wird, zeigen Sie die im Puffer enthaltene Zeichenfolge an, auf die das Buffer Feld der Struktur verweist. Verwenden Sie ein Größenmodifiziererpräfix , w um ein UNICODE_STRING Argument anzugeben, %wZz. B. . Das Length-Feld der Struktur muss auf die Länge der Zeichenfolge in Bytes festgelegt sein. Das MaximumLength-Feld der Struktur muss auf die Länge des Puffers in Bytes festgelegt sein.

Universelle C-Runtime (UCRT)
Es gibt ein bekanntes Problem in der UCRT, das zurzeit aus Kompatibilitätsgründen beibehalten wird. Wie der Bezeichner bezieht sich der S Z Bezeichner ohne Größenmodifiziererpräfix auf ein UNICODE_STRING , wenn eine schmale Druckfunktion (z. B. ) printfund eine ANSI_STRING breite Druckfunktion verwendet wird (z wprintf. B. ).
Verwenden Sie anstelle von Z, um eine ANSI_STRING.hZ wZ (oder lZ) kann weiterhin verwendet werden, um eine UNICODE_STRING.

In der Regel wird das Z Typzeichen nur in Treiberdebuggingfunktionen verwendet, die eine Konvertierungsspezifikation verwenden, z dbgPrint . B. und kdPrint.

In Visual Studio 2015 und höheren Versionen entspricht das Argument, das einem Gleitkommakonvertierungsbezeichner (a, A, , , Ee, fF, , , g) Gentspricht, der formatierten Ausgabe dem C99-Standard. In dieser Tabelle ist die formatierte Ausgabe aufgeführt:

Wert Output
Unendlichkeit inf
Stiller NaN nan
Signalisierender NaN nan(snan)
Unbestimmter NaN nan(ind)

Eine dieser Zeichenfolgen kann einem Zeichen vorangestellt werden. Wenn ein Gleitkomma-Konvertierungsspezifizierertyp ein Großbuchstabe ist,dann wird die Ausgabe auch in Großbuchstaben formatiert. Wenn der Formatbezeichner beispielsweise %F statt %f ist, wird infinity als INF statt inf formatiert. Die scanf-Funktionen können diese Zeichenfolgen auch analysieren, damit diese Werte einen Roundtrip für printf- und scanf-Funktionen durchführen können.

Vor Visual Studio 2015 verwendete die CRT ein anderes, Nicht-Standard-Format für die Ausgabe von unendlichen, unbestimmten oder NaN-Werten:

Wert Output
+ Infinity 1.#INFZufällige Ziffern
-Unendlichkeit -1.#INFZufällige Ziffern
unbestimmt (mit stillem NaN identisch) Zufällige .#IND Ziffern
NaN Zufällige .#NAN Ziffern

Möglicherweise wurde einer dieser Zeichenfolgen ein Zeichen vorangestellt und je nach Feldbreite und Genauigkeit, manchmal mit ungewöhnlichen Effekten, anders formatiert. Beispielsweise wird gedruckt1.#J, printf("%.2f\n", INFINITY) da die #INF auf zwei Ziffern gerundet werden würde.

Hinweis

Wenn das Argument, das %s oder %S oder dem Buffer-Feld des Arguments entspricht, das %Z entspricht, ein NULL-Zeiger „(NULL)“ ist, wird es angezeigt.

Hinweis

In allen Exponentialformaten beträgt die Anzahl der Ziffern des Exponenten, der angezeigt wird, zwei. Es werden nur wenn nötig drei verwendet. Mithilfe der _set_output_format Funktion können Sie die Anzahl der Ziffern festlegen, die aus Gründen der Abwärtskompatibilität mit Code angezeigt werden, der für Visual Studio 2013 und vorher geschrieben wurde.

Wichtig

Da das %n Format inhärent unsicher ist, ist es standardmäßig deaktiviert. Wenn %n in einer Formatzeichenfolge aufgetreten ist, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Informationen zum Aktivieren des %n Supports finden Sie unter _set_printf_count_output.

Flag-Direktiven

Das erste optionale Feld in einer Konvertierungsspezifikation enthält Flagdirektiven. Dieses Feld enthält null oder mehr Kennzeichenzeichen, die die Ausgabe von Zeichen, Leerzeichen, führende Nullen, Dezimalzeichen und oktale und hexadezimale Präfixe angeben. In einer Konvertierungsangabe können mehr als eine Flag-Anweisung erscheinen, und die Flag-Zeichen können in beliebiger Reihenfolge dargestellt werden.

Flag-Zeichen

Flag Bedeutung Standard
- Das Ergebnis mit der angegebenen Feldweite ist linksbündig. Rechtsbündig.
+ Verwenden Sie ein Zeichen (+oder -), um dem Ausgabewert ein Präfix zu setzen, wenn es sich um einen signierten Typ handelt. Das Vorzeichen taucht nur für negative Werte mit Vorzeichen (-) auf.
0 Wenn der Breite ein Präfix vorangestellt 0ist, werden führende Nullen hinzugefügt, bis die Mindestbreite erreicht ist. Wenn beides 0 angezeigt - wird, wird dies 0 ignoriert. Wenn 0 für ein ganzzahliges Format (i, , u, Xx, o, d) angegeben ist und eine Genauigkeitsspezifikation ( z. B. ) ebenfalls vorhanden ist, %04.dwird dies 0 ignoriert. Wenn 0 für das Gleitkommaformat oder A das a Gleitkommaformat angegeben wird, werden führende Nullen der Mantissa nach dem 0x Präfix oder 0X präfix vorangestellt. Keine Auffüllung.
Leerzeichen („ “) Verwenden Sie ein Leeres, um dem Ausgabewert ein Präfix zu setzen, wenn er signiert und positiv ist. Das Leerzeichen wird ignoriert, wenn jeweils das Leerzeichen- und das „+“-Flag erscheinen. Es wird kein Leerzeichen angezeigt.
# Wenn es mit dem ox, oder X format verwendet wird, verwendet 0das # Flag einen 0xwert ungleichen Ausgabewert bzw0X. präfixieren. Es wird kein Präfix angezeigt.
Wenn sie mit dem eAttribut , E, f, F, , aoder A format verwendet wird, erzwingt das # Flag den Ausgabewert, um einen Dezimalkommapunkt zu enthalten. Dezimaltrennzeichen werden nur dann angezeigt, wenn Ziffern darauf folgen.
Wenn sie mit dem g Format verwendet G wird, erzwingt das # Flag, dass der Ausgabewert einen Dezimalkommapunkt enthält und verhindert, dass nachfolgende Nullen abgeschnitten werden.

Wird ignoriert, wenn sie mit c, d, , i, uoder s.
Dezimaltrennzeichen werden nur dann angezeigt, wenn Ziffern darauf folgen. Nachfolgende Nullen werden abgeschnitten.

Breitenangabe

In einer Konvertierungsangabe, erscheint das optionale Feld für die Breitenangabe nach jedem flags-Zeichen. Das width Argument ist eine nicht negative Dezimalzahl, die die minimale Anzahl von Zeichen steuert, die ausgegeben werden. Wenn die Anzahl der Zeichen im Ausgabewert kleiner als die angegebene Breite ist, werden Leerzeichen links oder rechts neben den Werten hinzugefügt – je nachdem, ob das Flag der Linksausrichtung (-) angegeben ist – bis die Mindestbreite erreicht ist. Wenn width das Präfix 0 ist, werden führende Nullen zu ganzzahligen oder Gleitkommakonvertierungen hinzugefügt, bis die Mindestbreite erreicht ist, außer wenn die Konvertierung in eine Unendlichkeit oder NaNeine Unendlichkeit erfolgt.

Die Breitenangabe sorgt nie dafür, dass ein Wert abgeschnitten wird. Wenn die Anzahl der Zeichen im Ausgabewert größer als die angegebene Breite ist oder nicht width angegeben wird, werden alle Zeichen des Werts ausgegeben, vorbehaltlich der Genauigkeitsspezifikation.

Wenn die Genauigkeitsangabe ein Sternchen (*) ist, stellt ein int-Argument aus der Argumentliste den Wert bereit. Das width Argument muss dem Wert vorangehen, der in der Argumentliste formatiert ist, wie in diesem Beispiel gezeigt:

printf("%0*d", 5, 3); /* 00003 is output */

Ein fehlender oder kleiner width Wert in einer Konvertierungsspezifikation führt nicht zum Abschneiden eines Ausgabewerts. Wenn das Ergebnis einer Konvertierung breiter als der width Wert ist, wird das Feld erweitert, um das Konvertierungsergebnis zu enthalten.

Genauigkeitsangabe

In einer Konvertierungsangabe gibt das dritte optionale Feld die Genauigkeit an. Es besteht aus einem Punkt (.) gefolgt von einer nicht negativen Dezimalzahl, die abhängig vom Konvertierungstyp die Anzahl der Zeichenfolgenzeichen, die Anzahl der Dezimalstellen oder die Anzahl der zu ausgebenden signifikanten Ziffern angibt.

Im Gegensatz zu den Breitenangabe kann die Genauigkeitsangabe den Ausgabewert abschneiden oder auf einen Gleitkommawert aufrunden. Wenn precision als 0 angegeben wird und der zu konvertierende Wert 0 ist, gibt das Ergebnis keine Zeichenausgabe aus, wie in diesem Beispiel gezeigt:

printf( "%.0d", 0 ); /* No characters output */

Wenn die Genauigkeitsangabe ein Sternchen (*) ist, stellt ein int-Argument aus der Argumentliste den Wert bereit. In der Argumentliste muss das precision-Argument vor dem Wert stehen, der formatiert wird, wie im folgenden Beispiel gezeigt:

printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */

Das type Zeichen bestimmt entweder die Interpretation oder precision die Standardgenauigkeit, wenn precision sie weggelassen wird, wie in der folgenden Tabelle dargestellt.

Auswirkungen von Genauigkeitswerten auf den Typ

type Bedeutung Standard
a, A Die Genauigkeit gibt die Anzahl der Ziffern nach dem Punkt an. Die Standardgenauigkeit beträgt 13. Wenn die Genauigkeit 0 beträgt, wird kein Dezimaltrennzeichen gedruckt, es sei denn, das #-Flag wird verwendet.
c, C Die Genauigkeit hat keine Auswirkung. Zeichen wird gedruckt.
d, , io, u, , xX Die Genauigkeit gibt die minimale Anzahl der zu druckenden Ziffern an. Wenn die Anzahl der Ziffern im Argument kleiner als precision ist, wird der Ausgabewert auf der linken Seite mit Nullen aufgefüllt. Der Wert wird nicht abgeschnitten, wenn die Anzahl der Ziffern die Genauigkeit überschreitet. Die Standardgenauigkeit beträgt 1.
e, E Die Genauigkeit gibt die Anzahl der zu druckenden Ziffern nach dem Dezimaltrennzeichen an. Die letzte gedruckte Ziffer ist gerundet. Die Standardgenauigkeit beträgt 6. Wenn die Genauigkeit 0 oder der Punkt (.) ohne Eine Zahl angezeigt wird, wird kein Dezimalkomma gedruckt.
f, F Der Genauigkeitswert gibt die Anzahl der Ziffern nach dem Dezimaltrennzeichen an. Wenn ein Dezimaltrennzeichen angezeigt wird, wird mindestens eine Ziffer davor angezeigt. Der Wert wird auf die entsprechende Anzahl an Stellen gerundet. Die Standardgenauigkeit beträgt 6. Wenn die Genauigkeit 0 ist oder wenn der Punkt (.) ohne Eine Zahl angezeigt wird, nach der sie folgt, wird kein Dezimalkomma gedruckt.
g, G Die Genauigkeit gibt die maximale Anzahl an gedruckten signifikanten Stellen an. Sechs signifikante Stellen werden gedruckt, und nachfolgende Nullen werden abgeschnitten.
s, S Die Genauigkeit gibt die maximale Anzahl der zu druckenden Zeichen an. Es werden nicht mehr als precision Zeichen gedruckt. Zeichen werden gedruckt, bis ein Nullzeichen gefunden wird.

Angabe der Argumentgröße

In einer Konvertierungsangabe ist das size-Feld ein Argumentlängenmodifizierer für den Konvertierungsspezifizierertyp. Das Größenfeldpräfix für das Typfeldhh , h, , j, ( l Kleinbuchstabe L), L, , wllzt( I Großbuchstaben i) I32und I64– geben Sie je nach dem Konvertierungsbezeichner, den sie ändernden Konvertierungsbezeichner an, lange oder kurz, 32-Bit- oder 64-Bit-, Einzelbyte-Zeichen oder breite Zeichen. Diese Größenpräfixe werden zusammen mit Typzeichen in den Familien printf und wprintf der Funktionen verwendet, um der Interpretation von Argumentlängen gemäß der Darstellung in der folgenden Tabelle anzugeben. Das size-Feld ist für einige Argumenttypen optional. Wenn kein Größenpräfix angegeben ist, konsumiert das Formatierungsprogramm ganzzahlige Argumente, z.B. char, short, int, long mit oder ohne Vorzeichen und Aufzählungstypen, wie etwa 32-Bit int-Typen und float, double sowie long double, während Gleitkommaargumente als 64-Bit-double-Typen konsumiert werden. Dieses Verhalten stimmt mit den standardmäßigen Typerweiterungsregeln für Listen von Variablenargumenten überein. Weitere Informationen zur Argumentüberaufsufung finden Sie unter "Ellipsis" und "Standardargumente" in Postfix-Ausdrücken. Auf 32-Bit- und 64-Bit-Systemen muss die Konvertierungsspezifikation eines 64-Bit-Ganzzahlarguments ein Größenpräfix von ll oder I64enthalten. Andernfalls ist das Verhalten des Formatierungsprogramms nicht definiert.

Einige Typen weisen in 32-Bit- und 64-Bit-Code verschiedene Größen auf. Beispielsweise ist size_t in für x86-Systeme kompiliertem Code 32 Bit lang, bei Code für X64-Systeme jedoch 64 Bit lang. Zum Erstellen von plattformunabhängigem Formatierungscode für Typen mit variabler Breite können Sie einen Argumentgrößenmodifizierer mit variabler Breite verwenden. Verwenden Sie stattdessen einen 64-Bit-Argumentgrößenmodifizierer, und stufen Sie den Argumenttyp variabler Breite explizit auf 64 Bit hoch. Der Microsoft-spezifische I (Großbuchstabe i)-Argumentgrößenmodifizierer behandelt ganzzahlige Argumente mit variabler Breite, aber wir empfehlen die typspezifischen j, tund z Modifizierer für die Portabilität.

Größenpräfixe für printf- und wprintf-Formattypbezeichner

Angabe von Präfix Mit Typspezifizierer
char
unsigned char
hh d, i, o, u, x oder X
short int
short unsigned int
h d, i, o, u, x oder X
__int32
unsigned __int32
I32 d, i, o, u, x oder X
__int64
unsigned __int64
I64 d, i, o, u, x oder X
intmax_t
uintmax_t
j oder I64 d, i, o, u, x oder X
long double l (Kleinbuchstaben L) oder L a, A, e, E, f, F, g oder G
long int
long unsigned int
l (L als Kleinbuchstaben) d, i, o, u, x oder X
long long int
unsigned long long int
ll (Kleinbuchstabe LL) d, i, o, u, x oder X
ptrdiff_t t oder I (Großbuchstabe i) d, i, o, u, x oder X
size_t z oder I (Großbuchstabe i) d, i, o, u, x oder X
Einzelbytezeichen h c oder C
Breitzeichen l (Kleinbuchstaben L) oder w c oder C
Einzelbytezeichenfolge h s, Soder Z
Breitzeichenfolge l (Kleinbuchstaben L) oder w s, Soder Z

Die Typen ptrdiff_t und size_t sind __int32 oder unsigned __int32 auf 32-Bit-Plattformen und __int64 oder unsigned __int64 auf 64-Bit-Plattformen. Die I Präfixe (Großbuchstaben i), j, tund z Größe verwenden die richtige Argumentbreite für die Plattform.

Obwohl long double in Visual C++ ein gesonderter Typ ist, hat er die gleiche interne Darstellung wie double.

Ein hc Bezeichner oder hC Typbezeichner ist gleichbedeutend mit c printf Funktionen und C in wprintf Funktionen. A lc, lC, , wcoder wC Typbezeichner ist synonym mit C Funktionen printf und in c wprintf Funktionen. Ein hs Bezeichner oder hS Typbezeichner ist gleichbedeutend mit s printf Funktionen und S in wprintf Funktionen. Ein ls, lS, , wsoder wS Typbezeichner ist synonym mit S printf Funktionen und in s wprintf Funktionen.

Hinweis

Microsoft-spezifisch:
Die I Präfixe (Großbuchstaben i) I32I64und w Argumentgrößenmodifiziererpräfixe sind Microsoft-Erweiterungen und sind nicht ISO C-kompatibel. Das h Präfix, wenn es mit Daten vom Typ char und dem l Präfix (Kleinbuchstaben L) verwendet wird, wenn es mit Datentypen double verwendet wird, sind Microsoft-Erweiterungen.

Siehe auch

printf, , _printf_lwprintf_wprintf_l
printf_s, , _printf_s_lwprintf_s_wprintf_s_l
printf_p Positionsparameter