_vcprintf_p
, _vcprintf_p_l
, _vcwprintf_p
, _vcwprintf_p_l
Grava a saída formatada no console usando um ponteiro para uma lista de argumentos e dá suporte a parâmetros posicionais na cadeia de caracteres de formato.
Importante
Esta API não pode ser usada em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
int _vcprintf_p(
const char* format,
va_list argptr
);
int _vcprintf_p_l(
const char* format,
_locale_t locale,
va_list argptr
);
int _vcwprintf_p(
const wchar_t* format,
va_list argptr
);
int _vcwprintf_p_l(
const wchar_t* format,
_locale_t locale,
va_list argptr
);
Parâmetros
format
A especificação do formato.
argptr
Um ponteiro para uma lista de argumentos.
locale
A localidade a ser usada.
Para obter mais informações, consulte Sintaxe de especificação de formato: printf
e wprintf
funções.
Valor retornado
O número de caracteres gravados ou um valor negativo se ocorrer erro de saída. Se format
for um ponteiro nulo, o manipulador de parâmetro inválido será chamado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, errno
será definido como EINVAL
, e -1 será retornado.
Comentários
Cada uma dessas funções usa um ponteiro para uma lista de argumentos e, em seguida, usa a função _putch
para formatar e gravar os dados fornecidos no console. ( usa _putwch
em vez de _putch
. _vcwprintf_p
é a versão de caractere largo de _vcprintf_p
._vcwprintf_p
Ele usa uma cadeia de caracteres largos como argumento.)
As versões dessas funções que têm o sufixo _l
são idênticas, exceto por usarem o parâmetro de localidade passado em vez da localidade atual.
Cada argument
(se houver) é convertido e gerado de acordo com a especificação de formato correspondente em format
. A especificação de formato dá suporte a parâmetros posicionais para que você possa especificar a ordem na qual os argumentos são usados na cadeia de caracteres de formato. Para obter mais informações, consulte Parâmetros posicionais printf_p.
Essas funções não convertem caracteres de alimentação de linha na saída em combinações de CR-LF (alimentação de linha de retorno de carro).
Importante
Verifique se format
não é uma cadeia de caracteres definida pelo usuário. Para obter mais informações, confira Como evitar sobrecargas de buffer.
Essas funções validam o ponteiro de entrada e a cadeia de caracteres de formato. Se format
ou argument
for NULL
, ou se a cadeia de caracteres de formato contiver caracteres de formatação inválidos, essas funções invocarão o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão -1 e definirão errno
como EINVAL
.
Mapeamentos de rotina de texto genérico
Rotina Tchar.h | _UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_vtcprintf_p |
_vcprintf_p |
_vcprintf_p |
_vcwprintf_p |
_vtcprintf_p_l |
_vcprintf_p_l |
_vcprintf_p_l |
_vcwprintf_p_l |
Requisitos
Rotina | Cabeçalho necessário |
---|---|
_vcprintf_p , _vcprintf_p_l |
<conio.h> e <stdarg.h> |
_vcwprintf_p , _vcwprintf_p_l |
<conio.h> e <stdarg.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Importante
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
.
Exemplo
// crt_vcprintf_p.c
// compile with: /c
#include <conio.h>
#include <stdarg.h>
// An error formatting function that's used to print to the console.
int eprintf(const char* format, ...)
{
va_list args;
va_start(args, format);
int result = _vcprintf_p(format, args);
va_end(args);
return result;
}
int main()
{
int n = eprintf("parameter 2 = %2$d; parameter 1 = %1$s\r\n",
"one", 222);
_cprintf_s("%d characters printed\r\n");
}
parameter 2 = 222; parameter 1 = one
38 characters printed
Confira também
E/S de console e porta
_cprintf
, _cprintf_l
, _cwprintf
, _cwprintf_l
va_arg
, va_copy
, va_end
, va_start
Parâmetros posicionais printf_p