fprintf_s
, _fprintf_s_l
, fwprintf_s
, _fwprintf_s_l
, _ftprintf
, _ftprintf_l
, , _ftprintf_s
, , _ftprintf_s_l
Imprimir dados formatados em um fluxo. Essas funções são versões de , _fprintf_l
, fwprintf
, _fwprintf_l
com aprimoramentos defprintf
segurança, conforme descrito em Recursos de segurança no CRT.
Para _ftprintf_s
e _ftprintf_s_l
, consulte Mapeamentos de função de texto genérico.
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.
Valor retornado
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
, _fprintf_l
, fwprintf
,_fwprintf_l
), essas funções validam seus parâmetros e invocam o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro, se ou format
stream
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 funções de texto genérico
A função na coluna é mapeada tchar.h
para a função nas outras colunas, dependendo do conjunto de caracteres definido em tempo de compilação.
Função 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