Sintassi per la specifica del formato: funzioni printf e wprintfFormat specification syntax: printf and wprintf functions

Le diverse funzioni printf e wprintf accettano una stringa di formato e argomenti facoltativi e producono una sequenza di caratteri formattati per l'output.The various printf and wprintf functions take a format string and optional arguments and produce a formatted sequence of characters for output. La stringa di formato contiene zero o più direttive, che sono caratteri letterali per l'output o specifiche di conversione codificate che descrivono come formattare un argomento nell'output.The format string contains zero or more directives, which are either literal characters for output or encoded conversion specifications that describe how to format an argument in the output. Questo argomento descrive la sintassi usata per codificare le specifiche di conversione nella stringa di formato.This topic describes the syntax used to encode conversion specifications in the format string. Per l'elenco di queste funzioni, vedere I/O di flusso.For a listing of these functions, see Stream I/O.

Una specifica di conversione è costituita da campi obbligatori e facoltativi nel seguente formato:A conversion specification consists of optional and required fields in this form:

%[flag][larghezza][.precisione][dimensione]tipo%[flags][width][.precision][size]type

Ogni campo della specifica di conversione è un carattere o un numero che indica un particolare identificatore di conversione o opzione di formato.Each field of the conversion specification is a character or a number that signifies a particular format option or conversion specifier. Il campo obbligatorio tipo specifica il tipo di conversione da applicare a un argomento.The required type field specifies the kind of conversion to be applied to an argument. I campi facoltativi flag, larghezza e precisione controllano aspetti aggiuntivi del formato quali gli spazi o gli zeri iniziali, la giustificazione e la precisione visualizzata.The optional flags, width, and precision fields control additional format aspects such as leading spaces or zeroes, justification, and displayed precision. Il campo dimensione specifica la dimensione dell'argomento usato e convertito.The size field specifies the size of the argument consumed and converted.

Una specifica di conversione semplice contiene solo il segno di percentuale e un carattere tipo.A basic conversion specification contains only the percent sign and a type character. Ad esempio, %s specifica una conversione di stringhe.For example, %s specifies a string conversion. Per stampare un carattere di segno di percentuale, usare %%.To print a percent-sign character, use %%. Se un segno di percentuale è seguito da un carattere che non ha alcun significato come campo di formato, viene chiamato il gestore di parametro non valido.If a percent sign is followed by a character that has no meaning as a format field, the invalid parameter handler is invoked. Per altre informazioni, vedere Convalida dei parametri.For more information, see Parameter Validation.

Importante

Per garantire la sicurezza e la stabilità, assicurarsi che le stringhe di specifica della conversione non siano definite dall'utente.For security and stability, ensure that conversion specification strings are not user-defined. Ad esempio, si consideri un programma che richiede all'utente di inserire un nome e archivia l'input in una variabile di stringa denominata user_name.For example, consider a program that prompts the user to enter a name and stores the input in a string variable that's named user_name. Per stampare user_name, non eseguire questa operazione:To print user_name, do not do this:

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

Al contrario, eseguire questa operazione:Instead, do this:

printf( "%s", user_name );

Identificatore di conversione tipoType conversion specifier

Il carattere identificatore di conversione tipo specifica se l'argomento corrispondente deve essere interpretato come un carattere, una stringa, un puntatore, un numero intero o un numero a virgola mobile.The type conversion specifier character specifies whether to interpret the corresponding argument as a character, a string, a pointer, an integer, or a floating-point number. Il carattere tipo è l'unico campo di specifica conversione obbligatorio e viene visualizzato dopo tutti i campi facoltativi.The type character is the only required conversion specification field, and it appears after any optional fields.

Gli argomenti che seguono la stringa di formato vengono interpretati a seconda del carattere tipo corrispondente e del prefisso dimensione facoltativo.The arguments that follow the format string are interpreted according to the corresponding type character and the optional size prefix. Le conversioni dei tipi di carattere char e wchar_t vengono specificate con c o C e le stringhe di caratteri estesi a byte singolo e multibyte vengono specificate con s o S, a seconda della funzione di formattazione usata.Conversions for character types char and wchar_t are specified by using c or C, and single-byte and multi-byte or wide character strings are specified by using s or S, depending on which formatting function is being used. Gli argomenti di tipo stringa e carattere che vengono specificati usando c e s vengono interpretati come char e char* dalle funzioni della famiglia printf o come wchar_t e wchar_t* dalle funzioni della famiglia wprintf.Character and string arguments that are specified by using c and s are interpreted as char and char* by printf family functions, or as wchar_t and wchar_t* by wprintf family functions. Gli argomenti di tipo stringa e carattere che vengono specificati usando C e S vengono interpretati come wchar_t e wchar_t* dalle funzioni della famiglia printf o come char e char* dalle funzioni della famiglia wprintf.Character and string arguments that are specified by using C and S are interpreted as wchar_t and wchar_t* by printf family functions, or as char and char* by wprintf family functions. Questa funzionalità è specifica di Microsoft.This behavior is Microsoft specific.

I tipi Integer come short, int, long, long long e le loro varianti unsigned vengono specificati usando d, i, o, u, x e X. I tipi a virgola mobile come float, double e long double vengono specificati usando a, A, e, E, f, F, g e G. Per impostazione predefinita, a meno che non che vengano modificati da un prefisso dimensione, gli argomenti Integer vengono imposti al tipo int e gli argomenti a virgola mobile vengono imposti a double.Integer types such as short, int, long, long long, and their unsigned variants, are specified by using d, i, o, u, x, and X. Floating-point types such as float, double, and long double, are specified by using a, A, e, E, f, F, g, and G. By default, unless they are modified by a size prefix, integer arguments are coerced to int type, and floating-point arguments are coerced to double. Nei sistemi a 64 bit, un int è un valore a 32 bit; di conseguenza gli interi a 64 bit vengono troncati quando vengono formattati per l'output, a meno che non venga usato un prefisso dimensione ll o I64.On 64-bit systems, an int is a 32-bit value; therefore, 64-bit integers will be truncated when they are formatted for output unless a size prefix of ll or I64 is used. I tipi di puntatore specificati da p usano le dimensioni puntatore predefinite per la piattaforma.Pointer types that are specified by p use the default pointer size for the platform.

Nota

Sezione specifica MicrosoftMicrosoft Specific
Il carattere tipo Z e il comportamento dei caratteri tipo c, C, s e S usati con le funzioni printf e wprintf sono estensioni Microsoft.The Z type character, and the behavior of the c, C, s, and S type characters when they are used with the printf and wprintf functions, are Microsoft extensions. Lo standard ISO C usa c e s in modo coerente per i caratteri e le stringhe narrow e C e S per i caratteri e le stringhe wide in tutte le funzioni di formattazione.The ISO C standard uses c and s consistently for narrow characters and strings, and C and S for wide characters and strings, in all formatting functions.

Caratteri del campo tipoType field characters

Carattere tipoType character ArgomentoArgument Formato di outputOutput format
cc CarattereCharacter Una volta usato con funzioni printf, specifica un carattere a byte singolo; quando usato con funzioni wprintf, specifica un carattere wide.When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
CC CarattereCharacter Una volta usato con funzioni printf, specifica un carattere wide; quando usato con funzioni wprintf, specifica un carattere a byte singolo.When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
dd IntegerInteger Intero decimale con segno.Signed decimal integer.
ii IntegerInteger Intero decimale con segno.Signed decimal integer.
oo IntegerInteger Intero ottale senza segno.Unsigned octal integer.
uu IntegerInteger Intero decimale senza segno.Unsigned decimal integer.
xx IntegerInteger Intero esadecimale senza segno; usa "abcdef".Unsigned hexadecimal integer; uses "abcdef."
XX IntegerInteger Intero esadecimale senza segno; usa "ABCDEF".Unsigned hexadecimal integer; uses "ABCDEF."
ee A virgola mobileFloating-point Valore con segno che presenta il formato [-]d.dddddd[d] dove d corrisponde a una cifra decimale, dddd corrisponde a una o più cifre decimali a seconda della precisione specificata oppure a sei cifre per impostazione predefinita e dd[d] corrisponde a due o tre cifre decimali a seconda del formato di output e delle dimensioni dell'esponente.Signed value that has the form [-]d.dddddd[d] where d is one decimal digit, dddd is one or more decimal digits depending on the specified precision, or six by default, and dd[d] is two or three decimal digits depending on the output format and size of the exponent.
EE A virgola mobileFloating-point Identico al formato e con la differenza che l'esponente è introdotto da E anziché da e.Identical to the e format except that E rather than e introduces the exponent.
ff A virgola mobileFloating-point Valore con segno che ha il formato [-]dddd.dddd, dove dddd corrisponde a una o più cifre decimali.Signed value that has the form [-]dddd.dddd, where dddd is one or more decimal digits. Il numero di cifre prima del separatore decimale dipende dalla grandezza del numero, mentre il numero di cifre dopo il separatore decimale dipende dalla precisione richiesta o corrisponde a sei per impostazione predefinita.The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision, or six by default.
FF A virgola mobileFloating-point Identico al formato f con la differenza che gli output infinity e NaN sono in maiuscolo.Identical to the f format except that infinity and nan output is capitalized.
gg A virgola mobileFloating-point I valori con segno vengono visualizzati in formato f o e, a seconda di quale sia più compatto per il valore e la precisione specificati.Signed values are displayed in f or e format, whichever is more compact for the given value and precision. Il formato e viene usato solo quando l'esponente del valore è minore di -4 oppure maggiore o uguale all'argomento precision.The e format is used only when the exponent of the value is less than -4 or greater than or equal to the precision argument. Gli zeri finali vengono troncati e il separatore decimale viene visualizzato solo se uno o più cifre lo seguono.Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
GG A virgola mobileFloating-point Identico al formato g salvo per il fatto che l'esponente è introdotto da Eanziché da e (quando necessario).Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).
aa A virgola mobileFloating-point Valore a virgola mobile a precisione doppia esadecimale con segno e con formato [-]0xh.hhhhdd, dove h.hhhh sono le cifre esadecimali (in minuscolo) della mantissa, mentre dd sono una o più cifre dell'esponente.Signed hexadecimal double-precision floating-point value that has the form [-]0xh.hhhhdd, where h.hhhh are the hex digits (using lower case letters) of the mantissa, and dd are one or more digits for the exponent. La precisione indica il numero di cifre dopo il punto.The precision specifies the number of digits after the point.
AA A virgola mobileFloating-point Valore a virgola mobile a precisione doppia esadecimale con segno e con formato [-]0Xh.hhhhdd, dove h.hhhh sono le cifre esadecimali (in maiuscolo) della mantissa, mentre dd sono una o più cifre dell'esponente.Signed hexadecimal double-precision floating-point value that has the form [-]0Xh.hhhhdd, where h.hhhh are the hex digits (using capital letters) of the mantissa, and dd are one or more digits for the exponent. La precisione indica il numero di cifre dopo il punto.The precision specifies the number of digits after the point.
n Puntatore a interoPointer to integer Numero di caratteri che viene scritto correttamente fino al flusso o nel buffer.Number of characters that are successfully written so far to the stream or buffer. Questo valore viene archiviato nel valore intero in cui l'indirizzo viene fornito come argomento.This value is stored in the integer whose address is given as the argument. Le dimensioni del numero intero al quale si fa riferimento possono essere controllate da un prefisso di indicazione delle dimensioni dell'argomento.The size of the integer pointed to can be controlled by an argument size specification prefix. L'identificatore n è disattivato per impostazione predefinita. Per informazioni vedere l'importante nota sulla sicurezza.The n specifier is disabled by default; for information see the important security note.
pp Tipo di puntatorePointer type Visualizza l'argomento come indirizzo nelle cifre esadecimali.Displays the argument as an address in hexadecimal digits.
ss StringaString Una volta usato con funzioni printf, specifica una stringa di caratteri a byte singolo o multibyte; una volta usato con le funzioni wprintf, specifica una stringa di carattere wide.When used with printf functions, specifies a single-byte or multi-byte character string; when used with wprintf functions, specifies a wide-character string. I caratteri vengono visualizzati fino al primo carattere Null o fino a quando non viene raggiunto il valore precisione.Characters are displayed up to the first null character or until the precision value is reached.
SS StringaString Una volta usato con funzioni printf, specifica una stringa di caratteri wide; una volta usato con le funzioni wprintf, specifica una stringa di caratteri a un byte singolo o multibyte.When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte or multi-byte character string. I caratteri vengono visualizzati fino al primo carattere Null o fino a quando non viene raggiunto il valore precisione.Characters are displayed up to the first null character or until the precision value is reached.
ZZ Struttura ANSI_STRING o UNICODE_STRINGANSI_STRING or UNICODE_STRING structure Quando l'indirizzo di una struttura ANSI_STRING o UNICODE_STRING viene passato come argomento, visualizza la stringa contenuta nel buffer a cui fa riferimento il campo Buffer della struttura.When the address of an ANSI_STRING or UNICODE_STRING structure is passed as the argument, displays the string contained in the buffer pointed to by the Buffer field of the structure. Usare il prefisso modificatore dimensione w per specificare un argomento UNICODE_STRING, per esempio %wZ.Use a size modifier prefix of w to specify a UNICODE_STRING argument—for example, %wZ. Il campo Length della struttura deve essere impostato sulla lunghezza, espressa in byte, della stringa.The Length field of the structure must be set to the length, in bytes, of the string. Il campo MaximumLength della struttura deve essere impostato sulla lunghezza, espressa in byte, del buffer.The MaximumLength field of the structure must be set to the length, in bytes, of the buffer.

In genere il carattere tipo Z viene usato solo nelle funzioni che usano una specifica di formato, come ad esempio dbgPrint e kdPrint.Typically, the Z type character is used only in driver debugging functions that use a conversion specification, such as dbgPrint and kdPrint.

A partire da Visual Studio 2015, se l'argomento che corrisponde a un identificatore di conversione a virgola mobile (a, A, e, E, f, F, g, G) è infinito, non definito o NaN, l'output formattato è conforme allo standard C99.Starting in Visual Studio 2015, if the argument that corresponds to a floating-point conversion specifier (a, A, e, E, f, F, g, G) is infinite, indefinite, or NaN, the formatted output conforms to the C99 standard. Questa tabella elenca l'output formattato:This table lists the formatted output:

ValoreValue OutputOutput
infinityinfinity inf
NaN non interattivoQuiet NaN nan
NaN di segnalazioneSignalling NaN nan(snan)
NaN indefinitoIndefinite NaN nan(ind)

Qualsiasi valore tra questi può essere preceduto da un segno.Any of these values may be prefixed by a sign. Se un carattere identificatore di conversione tipo a virgola mobile è una lettera maiuscola, anche l'output viene formattato in lettere maiuscole.If a floating-point type conversion specifier character is a capital letter, then the output is also formatted in capital letters. Ad esempio, se l'identificatore di formato è %F anziché %f, un infinity viene formattato come INF anziché come inf.For example, if the format specifier is %F instead of %f, an infinity is formatted as INF instead of inf. Anche le funzioni scanf possono analizzare queste stringhe, pertanto questi valori possono completare un round trip tra le funzioni printf e scanf.The scanf functions can also parse these strings, so these values can make a round-trip through printf and scanf functions.

Prima di Visual Studio 2015, la libreria CRT usava un formato diverso, non standard per l'output di valori infinite, indefinite e NaN:Before Visual Studio 2015, the CRT used a different, non-standard format for output of infinite, indefinite, and NaN values:

ValoreValue OutputOutput
+ infinito+ infinity 1.#INF random-digits1.#INF random-digits
- infinito- infinity -1.#INF random-digits-1.#INF random-digits
Non definito (stesso valore di NaN non interattivo)Indefinite (same as quiet NaN) digit .#IND random-digitsdigit .#IND random-digits
NaNNaN digit .#NAN random-digitsdigit .#NAN random-digits

Ognuno di questi elementi potrebbe essere preceduto da un segno e potrebbe essere stato formattato in modo leggermente diverso a seconda della larghezza e della precisione del campo (talvolta con effetti insoliti).Any of these may have been prefixed by a sign, and may have been formatted slightly differently depending on field width and precision, sometimes with unusual effects. Ad esempio printf("%.2f\n", INFINITY) visualizzerà 1.#J, dato che #INF sarà "arrotondato" a una precisione di 2 cifre.For example, printf("%.2f\n", INFINITY) would print 1.#J because the #INF would be "rounded" to a precision of 2 digits.

Nota

Se l'argomento corrispondente a %s o %S o il campo Buffer dell'argomento corrispondente a %Z è un puntatore null, viene visualizzato "(null)".If the argument that corresponds to %s or %S, or the Buffer field of the argument that corresponds to %Z, is a null pointer, "(null)" is displayed.

Nota

In tutti i formati esponenziali, il numero minimo di cifre dell'esponente da visualizzare è due; tre cifre vengono usate solo in caso di necessità.In all exponential formats, the minimum number of digits of exponent to display is two, using three only if necessary. La funzione _set_output_format consente di impostare su tre il numero di cifre visualizzate, per garantire la compatibilità con il codice scritto per Visual Studio 2013 e versioni precedenti.By using the _set_output_format function, you can set the number of digits displayed to three for backward compatibility with code written for Visual Studio 2013 and before.

Importante

Poiché il formato %n è considerato non sicuro, è disabilitato per impostazione predefinita.Because the %n format is inherently insecure, it is disabled by default. Se %n viene rilevato in una stringa di formato, viene chiamato il gestore di parametri non validi, come descritto in Convalida dei parametri.If %n is encountered in a format string, the invalid parameter handler is invoked, as described in Parameter Validation. Per abilitare il supporto di %n, vedere set_printf_count_output.To enable %n support, see _set_printf_count_output.

Direttive flagFlag directives

Il primo campo facoltativo in una specifica di conversione contiene direttive flag, zero o più caratteri flag che specificano la giustificazione dell'output e controllano l'output di segni, spazi, zeri iniziali, separatori decimali e prefissi ottali ed esadecimali.The first optional field in a conversion specification contains flag directives, zero or more flag characters that specify output justification and control output of signs, blanks, leading zeros, decimal points, and octal and hexadecimal prefixes. In una specifica di conversione possono apparire più direttive flag e i caratteri flag possono essere visualizzati in qualsiasi ordine.More than one flag directive may appear in a conversion specification, and the flag characters can appear in any order.

Caratteri flagFlag characters

FlagFlag SignificatoMeaning DefaultDefault
- Allinea a sinistra il risultato entro la larghezza del campo specificata.Left align the result within the given field width. Allinea a destra.Right align.
+ Usa un segno (+ o -) come prefisso del valore di output se si tratta di un tipo con segno.Use a sign (+ or -) to prefix the output value if it is of a signed type. Il segno viene visualizzato solo per i valori con segno negativo (-).Sign appears only for negative signed values (-).
00 Se larghezza è preceduto da 0, vengono aggiunti zeri iniziali fino a ottenere la larghezza minima.If width is prefixed by 0, leading zeros are added until the minimum width is reached. Se appaiono sia 0 sia - , 0 viene ignorato.If both 0 and - appear, the 0 is ignored. Se 0 è specificato per un formato intero (i, u, x, X, o, d) ed è anche presente una specifica di precisione quale %04.d, 0 viene ignorato.If 0 is specified for an integer format (i, u, x, X, o, d) and a precision specification is also present—for example, %04.d—the 0 is ignored. Se 0 è specificato per il formato a virgola mobile a o A, gli zeri iniziali vengono posizionati prima della mantissa, dopo il prefisso 0x o 0X.If 0 is specified for the a or A floating-point format, leading zeros are prepended to the mantissa, after the 0x or 0X prefix. Nessun riempimento.No padding.
blank (' ')blank (' ') Usare uno spazio come prefisso del valore di output se questo è provvisto di segno e positivo.Use a blank to prefix the output value if it is signed and positive. Lo spazio viene ignorato se appaiono sia il flag blank sia il flag +.The blank is ignored if both the blank and + flags appear. Non viene visualizzato alcuno spazio.No blank appears.
# Quando viene usato con il formato o, x o X, il flag # usa rispettivamente 0, 0x o 0X, come prefisso di qualsiasi valore di output diverso da zero.When it's used with the o, x, or X format, the # flag uses 0, 0x, or 0X, respectively, to prefix any nonzero output value. Non viene visualizzato alcuno spazio.No blank appears.
Quando è usato con il formato e, E, f, F, a o A il flag # impone la presenza di un separatore decimale nel valore di output.When it's used with the e, E, f, F, a or A format, the # flag forces the output value to contain a decimal point. Il separatore decimale viene visualizzato solo se è seguito da cifre.Decimal point appears only if digits follow it.
Quando viene usato con il formato g o G il flag # impone la presenza di un separatore decimale nel valore di output e impedisce che gli zeri finali vengano troncati.When it's used with the g or G format, the # flag forces the output value to contain a decimal point and prevents the truncation of trailing zeros.

Ignorato se usato con c, d, i, u o s.Ignored when used with c, d, i, u, or s.
Il separatore decimale viene visualizzato solo se è seguito da cifre.Decimal point appears only if digits follow it. Gli zeri finali vengono troncati.Trailing zeros are truncated.

Specifica della larghezzaWidth specification

In una specifica di conversione, il campo facoltativo di specifica della larghezza viene visualizzato dopo qualsiasi carattere flag.In a conversion specification, the optional width specification field appears after any flags characters. L'argomento larghezza è un intero decimale non negativo che controlla il numero minimo di caratteri restituiti.The width argument is a non-negative decimal integer that controls the minimum number of characters that are output. Se il numero di caratteri nel valore di output è inferiore alla larghezza specificata, vengono aggiunti spazi a sinistra o a destra dei valori, a seconda che sia specificato o meno il flag di allineamento a sinistra (-), fino a raggiungere la larghezza minima.If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values—depending on whether the left-alignment flag (-) is specified—until the minimum width is reached. Se larghezza è preceduto da 0, vengono aggiunti zeri iniziali alle conversioni intere o a virgola mobile fino a raggiungere la larghezza minima, salvo se la conversione restituisce un valore infinito o non numerico.If width is prefixed by 0, leading zeros are added to integer or floating-point conversions until the minimum width is reached, except when conversion is to an infinity or NaN.

La specifica della larghezza non provoca mai il troncamento di un valore.The width specification never causes a value to be truncated. Se il numero di caratteri nel valore di output è maggiore della larghezza specificata o se larghezza non viene specificato, vengono restituiti tutti i caratteri del valore in base alla specifica precisione.If the number of characters in the output value is greater than the specified width, or if width is not given, all characters of the value are output, subject to the precision specification.

Se la specifica della larghezza è un asterisco (*), il valore è fornito da un argomento int dall'elenco degli argomenti.If the width specification is an asterisk (*), an int argument from the argument list supplies the value. L'argomento larghezza deve precedere il valore che viene formattato nell'elenco degli argomenti, come illustrato nel seguente esempio:The width argument must precede the value that's being formatted in the argument list, as shown in this example:

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

Un valore larghezza mancante o di piccole dimensioni in una specifica di conversione non provoca il troncamento di un valore di output.A missing or small width value in a conversion specification does not cause the truncation of an output value. Se il risultato di una conversione è più ampio del valore di larghezza, il campo viene espanso per contenere il risultato della conversione.If the result of a conversion is wider than the width value, the field expands to contain the conversion result.

Specifica della precisionePrecision specification

In una specifica di conversione, il terzo campo facoltativo è la specifica di precisione.In a conversion specification, the third optional field is the precision specification. È costituita da un punto (.) seguito da un intero decimale non negativo che, a seconda del tipo di conversione, specifica il numero di caratteri della stringa, il numero di posizioni decimali o il numero di cifre significative da restituire.It consists of a period (.) followed by a non-negative decimal integer that, depending on the conversion type, specifies the number of string characters, the number of decimal places, or the number of significant digits to be output.

A differenza della specifica della larghezza, la specifica della precisione può causare il troncamento del valore di output o l'arrotondamento di un valore a virgola mobile.Unlike the width specification, the precision specification can cause either truncation of the output value or rounding of a floating-point value. Se precisione viene specificato come 0 e il valore da convertire è 0, non verrà restituito alcun carattere nell'output, come illustrato in questo esempio:If precision is specified as 0 and the value to be converted is 0, the result is no characters output, as shown in this example:

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

Se la specifica della precisione è un asterisco (*), il valore viene specificato da un argomento int dell'elenco degli argomenti.If the precision specification is an asterisk (*), an int argument from the argument list supplies the value. Nell'elenco degli argomenti, l'argomento precisione deve precedere il valore da formattare, come illustrato nel seguente esempio:In the argument list, the precision argument must precede the value that's being formatted, as shown in this example:

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

Il carattere tipo determina l'interpretazione di precisione o la precisione predefinita quando precisione viene omesso, come illustrato nella tabella seguente.The type character determines either the interpretation of precision or the default precision when precision is omitted, as shown in the following table.

Effetti del tipo sui valori di precisioneHow Precision Values Affect Type

TipoType SignificatoMeaning DefaultDefault
a, Aa, A La precisione indica il numero di cifre dopo il punto.The precision specifies the number of digits after the point. La precisione predefinita è 13.Default precision is 13. Se la precisione è 0 non viene stampato alcun separatore decimale, a meno che non venga usato il flag #.If precision is 0, no decimal point is printed unless the # flag is used.
c, Cc, C La precisione non ha alcun effetto.The precision has no effect. Viene stampato il carattere.Character is printed.
d, i, o, u, x, Xd, i, o, u, x, X La precisione specifica il numero minimo di cifre da stampare.The precision specifies the minimum number of digits to be printed. Se il numero di cifre nell'argomento è minore di precisione, il valore di output viene riempito a sinistra con zeri.If the number of digits in the argument is less than precision, the output value is padded on the left with zeros. Il valore non viene troncato quando il numero di cifre supera precisione.The value is not truncated when the number of digits exceeds precision. La precisione predefinita è 1.Default precision is 1.
e, Ee, E La precisione specifica il numero di cifre da stampare dopo il separatore decimale.The precision specifies the number of digits to be printed after the decimal point. L'ultima cifra stampata viene arrotondata.The last printed digit is rounded. La precisione predefinita è 6.Default precision is 6. Se precisione è 0 o il punto (.) non è seguito da un numero, non viene stampato alcun separatore decimale.If precision is 0 or the period (.) appears without a number following it, no decimal point is printed.
f, Ff, F Il valore di precisione specifica il numero di cifre dopo il separatore decimale.The precision value specifies the number of digits after the decimal point. Se viene visualizzato un separatore decimale, prima di esso viene visualizzata almeno una cifra.If a decimal point appears, at least one digit appears before it. Il valore viene arrotondato al numero di cifre appropriato.The value is rounded to the appropriate number of digits. La precisione predefinita è 6.Default precision is 6. Se precisione è 0 o il punto (.) non è seguito da un numero, non viene stampato alcun separatore decimale.If precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.
g, Gg, G La precisione specifica il numero massimo di cifre significative da stampare.The precision specifies the maximum number of significant digits printed. Vengono stampate sei cifre significative e gli eventuali zeri finali vengono troncati.Six significant digits are printed, and any trailing zeros are truncated.
s, Ss, S La precisione specifica il numero massimo di caratteri da stampare.The precision specifies the maximum number of characters to be printed. I caratteri in eccesso rispetto al valore precisione non vengono stampati.Characters in excess of precision are not printed. I caratteri vengono stampati fino a quando non viene rilevato un carattere Null.Characters are printed until a null character is encountered.

Specifica delle dimensioni dell'argomentoArgument size specification

In una specifica di conversione il campo dimensione è un modificatore della lunghezza argomento per l'identificatore di conversione tipo.In a conversion specification, the size field is an argument length modifier for the type conversion specifier. I prefissi del campo dimensione per il campo tipo (hh, h, j, l (L minuscola), L, ll, t, w, z, I (i maiuscola), I32 e I64) specificano le "dimensioni" dell'argomento corrispondente, ovvero lungo o corto, a 32 bit o a 64 bit, carattere a byte singolo o carattere wide, a seconda dell'identificatore di conversione che viene modificato.The size field prefixes to the type field—hh, h, j, l (lowercase L), L, ll, t, w, z, I (uppercase i), I32, and I64—specify the "size" of the corresponding argument—long or short, 32-bit or 64-bit, single-byte character or wide character—depending on the conversion specifier that they modify. Questi prefissi di dimensioni vengono usati con i caratteri tipo nei gruppi di funzioni printf e wprintf per specificare l'interpretazione delle lunghezze degli argomenti, come mostrato nella tabella seguente.These size prefixes are used with type characters in the printf and wprintf families of functions to specify the interpretation of argument sizes, as shown in the following table. Il campo dimensione è facoltativo per alcuni tipi di argomento.The size field is optional for some argument types. Quando non viene specificato alcun prefisso, il formattatore usa argomenti di tipo Integer, ad esempio char, short, int, long firmati o non firmati, e tipi di enumerazione, ad esempio i tipi int a 32 bit e gli argomenti a virgola mobile float, double, e long double vengono usati come tipi double a 64 bit.When no size prefix is specified, the formatter consumes integer arguments—for example, signed or unsigned char, short, int, long, and enumeration types—as 32-bit int types, and float, double, and long double floating-point arguments are consumed as 64-bit double types. Corrisponde alle regole di promozione degli argomenti predefinite per elenchi di argomenti variabili.This matches the default argument promotion rules for variable argument lists. Per altre informazioni sulla promozione di argomenti, vedere Puntini di sospensione e argomenti predefiniti in Espressioni in forma suffissa.For more information about argument promotion, see Ellipses and Default Arguments in Postfix expressions. Nei sistemi a 32 bit e 64 bit la specifica di conversione del formato di un argomento Integer a 64 bit deve includere un prefisso di dimensione ll o I64.On both 32-bit and 64-bit systems, the conversion specification of a 64-bit integer argument must include a size prefix of ll or I64. In caso contrario, il comportamento del formattatore non sarà definito.Otherwise, the behavior of the formatter is undefined.

Alcuni tipi corrispondono a dimensioni diverse le codice a 32 bit e a 64 bit.Some types are different sizes in 32-bit and 64-bit code. Ad esempio, size_t ha una lunghezza pari a 32 bit nel codice compilato per x86 e a 64 bit nel codice compilato per x64.For example, size_t is 32 bits long in code compiled for x86, and 64 bits in code compiled for x64. Per creare codice di formattazione indipendente dalla piattaforma per tipi a larghezza variabile, è possibile usare un modificatore di dimensioni per argomenti a larghezza variabile.To create platform-agnostic formatting code for variable-width types, you can use a variable-width argument size modifier. In alternativa, usare un modificatore di dimensioni di argomenti a 64 bit e alzare di livello a 64 bit in modo esplicito il tipo di argomento a larghezza variabile.Alternatively, use a 64-bit argument size modifier and explicitly promote the variable-width argument type to 64 bits. Il modificatore di dimensioni argomento specifico di Microsoft I (i maiuscola) gestisce gli argomenti interi con larghezza variabile; tuttavia per la portabilità è consigliato l'uso dei modificatori specifici del tipo j, t e z.The Microsoft-specific I (uppercase i) argument size modifier handles variable-width integer arguments, but we recommend the type-specific j, t, and z modifiers for portability.

Prefissi di dimensione per identificatori di tipo di formato printf e wprintfSize Prefixes for printf and wprintf Format-Type Specifiers

Per specificareTo specify Prefisso da usareUse prefix Con identificatore del tipoWith type specifier
char
unsigned char
hhhh d, i, o, u, x o Xd, i, o, u, x, or X
short int
short unsigned int
hh d, i, o, u, x o Xd, i, o, u, x, or X
__int32
unsigned __int32
I32I32 d, i, o, u, x o Xd, i, o, u, x, or X
__int64
unsigned __int64
I64I64 d, i, o, u, x o Xd, i, o, u, x, or X
intmax_t
uintmax_t
j o I64j or I64 d, i, o, u, x o Xd, i, o, u, x, or X
long double l (L minuscola) o Ll (lowercase L) or L a, A, e, E, f, F, g o Ga, A, e, E, f, F, g, or G
long int
long unsigned int
l (L minuscola)l (lowercase L) d, i, o, u, x o Xd, i, o, u, x, or X
long long int
unsigned long long int
ll (LL minuscole)ll (lowercase LL) d, i, o, u, x o Xd, i, o, u, x, or X
ptrdiff_t t o I (i maiuscola)t or I (uppercase i) d, i, o, u, x o Xd, i, o, u, x, or X
size_t z o I (i maiuscola)z or I (uppercase i) d, i, o, u, x o Xd, i, o, u, x, or X
Carattere a byte singoloSingle-byte character hh c o Cc or C
Carattere wideWide character l (L minuscola) o wl (lowercase L) or w c o Cc or C
Stringa con caratteri a byte singoloSingle-byte character string hh s, S o Zs, S, or Z
Stringa di caratteri wideWide-character string l (L minuscola) o wl (lowercase L) or w s, S o Zs, S, or Z

I tipi ptrdiff_t e size_t sono __int32 o unsigned __int32 nelle piattaforme a 32 bit e __int64 o unsigned __int64 nelle piattaforme a 64 bit.The ptrdiff_t and size_t types are __int32 or unsigned __int32 on 32-bit platforms, and __int64 or unsigned __int64 on 64-bit platforms. I prefissi di dimensioni I (i maiuscola), j, t e z adottano la larghezza argomento corretta per la piattaforma.The I (uppercase i), j, t, and z size prefixes take the correct argument width for the platform.

In Visual C++, anche se long double è un tipo distinto, ha la stessa rappresentazione interna di double.In Visual C++, although long double is a distinct type, it has the same internal representation as double.

Un identificatore di tipo hc o hC è sinonimo di c nelle funzioni printf e di C nelle funzioni wprintf.An hc or hC type specifier is synonymous with c in printf functions and with C in wprintf functions. Un identificatore di tipo lc, lC, wc o wC è sinonimo di C nelle funzioni printf e di c nelle funzioni wprintf.An lc, lC, wc or wC type specifier is synonymous with C in printf functions and with c in wprintf functions. Un identificatore di tipo hs o hS è sinonimo di s nelle funzioni printf e di S nelle funzioni wprintf.An hs or hS type specifier is synonymous with s in printf functions and with S in wprintf functions. Un identificatore di tipo ls, lS, ws o wS è sinonimo di S nelle funzioni printf e di s nelle funzioni wprintf.An ls, lS, ws or wS type specifier is synonymous with S in printf functions and with s in wprintf functions.

Nota

Sezione specifica MicrosoftMicrosoft Specific
I prefissi di modifica dimensione argomento I (i maiuscola), I32, I64 e w sono estensioni Microsoft e non sono compatibili con ISO C.The I (uppercase i), I32, I64, and w argument size modifier prefixes are Microsoft extensions and are not ISO C-compatible. Il prefisso h usato con dati di tipo char e il prefisso l (L minuscola) usato con dati di tipo double sono estensioni Microsoft.The h prefix when it's used with data of type char and the l (lowercase L) prefix when it's used with data of type double are Microsoft extensions.

Vedere ancheSee Also

printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_lprintf_s, _printf_s_l, wprintf_s, _wprintf_s_l
Parametri posizionali printf_pprintf_p Positional Parameters