Partilhar via


_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