fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l

Stampare dati formattati in un flusso. Queste funzioni sono versioni di fprintf, _fprintf_l, fwprintf, _fwprintf_l con miglioramenti della sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

int fprintf_s(
   FILE *stream,
   const char *format [,
   argument_list ]
);
int _fprintf_s_l(
   FILE *stream,
   const char *format,
   _locale_t locale [,
   argument_list ]
);
int fwprintf_s(
   FILE *stream,
   const wchar_t *format [,
   argument_list ]
);
int _fwprintf_s_l(
   FILE *stream,
   const wchar_t *format,
   _locale_t locale [,
   argument_list ]
);

Parametri

stream
Puntatore alla struttura FILE .

format
Stringa di controllo del formato.

argument_list
Argomenti facoltativi per la stringa di formato.

locale
Impostazioni locali da usare.

Valore restituito

fprintf_s restituisce il numero di byte scritti. fwprintf_s restituisce il numero di caratteri wide scritti. Ognuna di queste funzioni restituisce invece un valore negativo quando si verifica un errore di output.

Osservazioni:

La funzione fprintf_s formatta e stampa una serie di caratteri e di valori nell'elemento di output stream. Ogni argomento in argument_list (se presente) viene convertito e restituito in base alla specifica di formato corrispondente in format. L'argomento format usa la sintassi della specifica del formato per printf le funzioni e wprintf .

fwprintf_s è una versione a caratteri wide di fprintf_s. In fwprintf_s, format è una stringa di caratteri wide. Queste funzioni si comportano in modo identico se il flusso viene aperto in modalità ANSI. fprintf_s non supporta attualmente l'output in un flusso UNICODE.

Le versioni di queste funzioni con il suffisso _l sono identiche ad eccezione per il fatto che usano il parametro delle impostazioni locali passato al posto di quelle correnti.

Importante

Assicurarsi che format non sia una stringa definita dall'utente.

A partire da Windows 10 versione 2004 (build 19041), la printf famiglia di funzioni stampa esattamente numeri a virgola mobile rappresentabili in base alle regole I edizione Enterprise E 754 per l'arrotondamento. Nelle versioni precedenti di Windows, i numeri a virgola mobile che terminano in '5' verrebbero sempre arrotondati. I edizione Enterprise E 754 indica che devono arrotondare alla cifra pari più vicina (nota anche come "Arrotondamento del banchiere"). Ad esempio, sia printf("%1.0f", 1.5) che printf("%1.0f", 2.5) devono essere arrotondati a 2. In precedenza, 1,5 arrotonderebbe a 2 e 2,5 arrotonderebbe a 3. Questa modifica influisce solo sui numeri rappresentabili esattamente. Ad esempio, 2.35 (che, se rappresentato in memoria, è più vicino a 2,350000000000000008) continua a arrotondare fino a 2,4. L'arrotondamento eseguito da queste funzioni ora rispetta anche la modalità di arrotondamento a virgola mobile impostata da fesetround. In precedenza, l'arrotondamento ha sempre scelto FE_TONEAREST il comportamento. Questa modifica interessa solo i programmi compilati con Visual Studio 2019 versione 16.2 e successive. Per usare il comportamento di arrotondamento a virgola mobile legacy, collegarsi a "legacy_stdio_float_rounding.obj".

Analogamente alle versioni non sicure (vedere fprintf, _fprintf_lfwprintf, , _fwprintf_l), queste funzioni convalidano i relativi parametri e richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri, se stream o format è un NULL puntatore. Viene convalidata anche la stringa di formato stessa. Se sono presenti identificatori di formattazione sconosciuti o non corretti, queste funzioni generano l'eccezione di parametro non valido. In tutti casi, se l'esecuzione può continuare, le funzioni restituiscono -1 e impostano errno su EINVAL. Per altre informazioni sui codici restituiti, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Mapping di routine di testo generico

TCHAR.H Routine _UNICODE e _MBCS non definito _MBCS Definito _UNICODE Definito
_ftprintf_s fprintf_s fprintf_s fwprintf_s
_ftprintf_s_l _fprintf_s_l _fprintf_s_l _fwprintf_s_l

Per altre informazioni, vedere Sintassi delle specifiche di formato.

Requisiti

Funzione Intestazione obbligatoria
fprintf_s, _fprintf_s_l <stdio.h>
fwprintf_s, _fwprintf_s_l <stdio.h> oppure <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_fprintf_s.c
// This program uses fprintf_s to format various
// data and print it to the file named FPRINTF_S.OUT. It
// then displays FPRINTF_S.OUT on the screen using the system
// function to invoke the operating-system TYPE command.

#include <stdio.h>
#include <process.h>

FILE *stream;

int main( void )
{
   int    i = 10;
   double fp = 1.5;
   char   s[] = "this is a string";
   char   c = '\n';

   fopen_s( &stream, "fprintf_s.out", "w" );
   fprintf_s( stream, "%s%c", s, c );
   fprintf_s( stream, "%d\n", i );
   fprintf_s( stream, "%f\n", fp );
   fclose( stream );
   system( "type fprintf_s.out" );
}
this is a string
10
1.500000

Vedi anche

I/O di flusso
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
fscanf, _fscanf_l, fwscanf, _fwscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l