fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l

Imprimir dados formatados em um fluxo. Essas funções são versões do , , , _fwprintf_lcom aprimoramentos de segurança, _fprintf_lfwprintfconforme descrito em Recursos de fprintfsegurança na CRT.

Sintaxe

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 ]
);

Parâmetros

stream
Ponteiro para a estrutura FILE.

format
Cadeia de caracteres de controle de formato.

argument_list
Argumentos opcionais para a cadeia de caracteres de formato.

locale
A localidade a ser usada.

Retornar valor

fprintf_s retorna o número de bytes gravados. fwprintf_s retorna o número de caracteres largos gravados. Cada uma dessas funções retorna um valor negativo quando ocorre um erro de saída.

Comentários

fprintf_s formata e imprime uma série de caracteres e valores para a saída stream. Cada argumento em argument_list (se houver) é convertido e gerado de acordo com a especificação de formato correspondente em format. O argumento format usa a sintaxe de especificação de formato para as funções printf e wprintf.

fwprintf_s é uma versão de caractere largo de fprintf_s; em fwprintf_s, format é uma cadeia de caracteres largos. Essas funções terão comportamento idêntico se o fluxo for aberto no modo ANSI. Atualmente, fprintf_s não dá suporte para a saída em um fluxo UNICODE.

As versões dessas funções com o sufixo _l são idênticas, com a exceção de que usam o parâmetro de localidade passado em vez da localidade atual.

Importante

Verifique se format não é uma cadeia de caracteres definida pelo usuário.

Começando pelo Windows 10 versão 2004 (build 19041), a família de funções printf imprime números de ponto flutuante exatamente representáveis de acordo com as regras do IEEE 754 para arredondamento. Em versões anteriores do Windows, números de ponto flutuante que pudessem ser representados com exatidão e que terminassem em '5' eram sempre arredondados para cima. O IEEE 754 afirma que eles precisam arredondar para o dígito par mais próximo (também conhecido como "arredondamento bancário"). Por exemplo, ambos printf("%1.0f", 1.5) e printf("%1.0f", 2.5) devem ser arredondados para 2. Anteriormente, 1,5 seria arredondado para 2 e 2,5 para 3. Essa alteração afeta apenas números que possam ser representados com exatidão. Por exemplo, 2,35 (que, quando representado na memória, está mais próximo de 2,35000000000000008) continua arredondando para 2,4. O arredondamento feito por essas funções agora também respeita o modo de arredondamento de ponto flutuante definido por fesetround. Anteriormente, o arredondamento sempre escolhia o comportamento FE_TONEAREST. Essa alteração afeta apenas os programas criados usando o Visual Studio 2019 versão 16.2 e posteriores. Para usar o comportamento de arredondamento de ponto flutuante herdado, vincule-o a 'legacy_stdio_float_rounding.obj'.

Como as versões não seguras (consulte fprintf, , ,_fwprintf_l ), essas funções validam seus parâmetros e invocam o manipulador de parâmetros inválido, conforme descrito em Validação de parâmetro, fwprintf_fprintf_lse ou formatstream for um NULL ponteiro. A cadeia de caracteres de formato propriamente dita também é validada. Se houver algum especificador de formatação desconhecido ou mal formado, essas funções gerarão a exceção de parâmetro inválido. Em todo caso, se a execução puder continuar, essas funções retornarão -1 e definirão errno como EINVAL. Para obter mais informações sobre códigos de retorno, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_ftprintf_s fprintf_s fprintf_s fwprintf_s
_ftprintf_s_l _fprintf_s_l _fprintf_s_l _fwprintf_s_l

Para obter mais informações, consulte Sintaxe de especificação de formato.

Requisitos

Função Cabeçalho necessário
fprintf_s, _fprintf_s_l <stdio.h>
fwprintf_s, _fwprintf_s_l <stdio.h> ou <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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

Confira também

E/S de fluxo
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
fscanf, _fscanf_l, fwscanf, _fwscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l