Linguaggio C - printf(), fprintf(), sprintf(), snprintf(), vprintf(), vfprintf(), vsprintf(), vsnprintf()

NOME

printf(), fprintf(), sprintf(), snprintf(), vprintf(), vfprintf(), vsprintf(), vsnprintf() - output formattato

SINOPSI

#include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...); #include <stdarg.h> int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *str, const char *format, va_list ap); int vsnprintf(char *str, size_t size, const char *format, va_list ap);

DESCRIZIONE

La funzione printf() scrive su stdout gli argomenti passati, eseguendo le opportune conversioni sotto il controllo della stringa di formattazione format.

La stringa di formattazione format puo' contenere sia caratteri ordinari che direttive di conversione.
I caratteri ordinari contenuti in format vengono copiati direttamente sullo stdout, mentre le direttive di conversione specificano come devono essere trattati gli argomenti che seguono.
Il primo argomento da trattare e' quello immediatamente successivo alla stringa di formattazione format.
Ogni volta che un argomento e' stato trattato, l'esame passa all'argomento successivo. Pertanto ciascun argomento viene impiegato una e una sola volta, dopodiche' viene preso in considerazione l'argomento successivo.

Ogni direttiva di conversione inizia con il carattere % e termina con uno dei caratteri d, i, o, x, X, u, c, s, f, e, E, g, E, p, n, %.
Tra il carattere di inizio % e il carattere di conversione possono essere specificati dei flag (in ordine qualsiasi), l'ampiezza, la precisione ed un modificatore.

La struttura della direttiva di conversione e' riportata di seguito:
% Obbligatorio Indica l'inizio di una direttiva di conversione.
- Flag opzionale Specifica un incolonnamento a sinistra.
+ Flag opzionale Specifica che il segno verra' sempre stampato.
' ' (spazio) Flag opzionale Specifica che verra' stampato o il segno negativo o uno spazio.
0 Flag opzionale Specifica che nelle conversioni numeriche, i caratteri di riempimento saranno 0 (zeri) anziche' spazi.
# Flag opzionale Specifica un formato alternativo per l'output.
Se il carattere di conversione e' o (ottale) e se il valore da convertire e' diverso da zero, il primo carattere stampato e' 0.
Se il carattere di conversione e' x o X (esadecimale) e se il valore da convertire non e' nullo, i primi caratteri stampati saranno 0x o 0X a seconda che la direttiva sia x o X.
Se il carattere di conversione e' e o E o f o g o G viene sempre stampato il punto decimale. Con g o G gli zeri non significativi non sono rimossi.
Ampiezza Numero opzionale Dimensione minima del campo.
L'ampiezza puo' essere sostituita dal carattere *. In tal caso il valore dell'ampiezza viene letto dal prossimo argomento che deve essere di tipo int.
'.' (punto) Opzionale Separa l'ampiezza dalla precisione.
Se viene indicato il punto, ma viene omessa la precisione, questa e' assunta a zero.
Precisione Numero opzionale Puo' indicare:
La dimensione massima stampabile della stringa per il carattere di conversione s.
Il numero di cifre decimali per i caratteri di conversione e, E o f.
Il numero di cifre significative per i caratteri di conversione g o G.
La precisione puo' essere sostituita dal carattere *. In tal caso il valore della precisione viene letto dal prossimo argomento che deve essere di tipo int.
Modificatore Lettera opzionale La lettera h seguita da uno dei caratteri di conversione d, i, u, o, x o X indica che l'argomento e' uno short int o uno unsigned short int.
Il modificatore l (elle) con gli stessi caratteri di conversione, indica che l'argomento e' un long int o uno unsigned long int.
Il modificatore L seguito da uno dei caratteri di conversione e, E, f, g o G indica che l'argomento e' un long double.
Carattere
di
conversione
Lettera obbligatoria Termina la specifica di conversione relativa ad un argomento della lista variabile.
Di seguito e' indicato, in funzione del carattere di conversione, il tipo di parametro atteso (in mancanza di modificatori) e quale conversione viene effettuata.
Carattere Tipo arg. Specifica di conversione
d, i int L'argomento e' convertito a decimale segnato
u int L'argomento e' convertito in decimale senza segno.
o int L'argomento e' convertito in notazione ottale e priva di segno
x, X int L'argomento e' convertito in notazione esadecimale priva di segno.
A secondo che sia specificato x o X, le cifre esadecimali impiegate sono rispettivamente abcdef o ABCDEF.
c int L'argomento e' convertito in unsigned char e viene scritto il carattere risultante.
s char * Stampa la stringa individuata dall'argomento, fino a raggiungere il carattere '\0'.
f double Converte l'argomento in notazione decimale nel formato [-]ddd.ddd dove le cifre della parte decimale sono date dalla precisione, che per default vale 6.
e, E double L'argomento e' stampato in notazione esponenziale, in cui viene riportata la mantissa, la parte decimale e l'esponete preceduto da e oppure da E, in funzione del carattere di conversione indicato.
La parte decimale e' determinata dalla precisione (default = 6).
g, G double L'argomento e' convertito con le regole definite per il carattere di conversione f o e o E.
e o E viene utilizzato se l'esponente e' < -4 o e' maggiore o uguale alla precisione. Viene utilizzato f nell'altro caso.
p void * Viene stampato il valore del puntatore passato come argomento.
n int * Il numero di caratteri scritti vengono memorizzati nell'intero puntato dall'argomento.
Nessun argomento viene convertito.
%   Stampa il carattere '%'.
Nessun argomento viene trattato.

La funzione fprintf() ha lo stesso comportamento della funzione printf() ma l'output avviene su stream.

La funzione sprintf() differisce dalla funzione printf() in quanto i caratteri vengono scritti nell'area puntata da str. Naturalmente str deve essere ampia a sufficienza per contenere i caratteri in output piu' il terminatore '\0'.

La funzione snprintf() e' analoga alla funzione sprintf(), ma non scrive piu' di size byte (incluso il terminatore '\0') su str. Se l'output supera il limite di size byte, allora la funzione fallisce e viene restituito il valore -1.

Le funzioni vprintf(), vfprintf(), vsprintf() e vsnprintf() sono analoghe alle corrispondenti funzioni printf(), fprintf(), sprintf() e snprintf() dalle quali differiscono per il modo in cui sono passati gli argomenti seguenti a format. Per queste funzioni e' infatti prevista la variable argument list ap.
Per maggiori informazioni sulla variable argument list, consultare le man pages di stdarg.h

VALORE DI RITORNO

Le funzioni printf(), fprintf(), sprintf(), snprintf(), vprintf(), vfprintf(), vsprintf() e vsnprintf() ritornano il numero di caratteri scritti, oppure un valore negativo in caso di errore.

CONFORME A

Funzioni printf(), fprintf(), sprintf(), vprintf(), vfprintf() e vsprintf: ANSI C3.159-1989 (`ANSI C')

VEDI ANCHE

fopen() fdopen() freopen() tmpfile() fclose() setbuf() setbuffer() setlinebuf() setvbuf() clearerr() feof() ferror() fileno() fseek() rewind() ftell() fgetpos() fsetpos() fflush() fgetc() getc() getchar() ungetc() fputc() putc() putchar() fgets() gets() fputs() puts() scanf() fscanf() sscanf() vscanf() vsscanf() vfscanf() fread() fwrite()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page
Indice funzioni Indice funzioni C