Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'função': não foram passados argumentos suficientes para a string de formatação
Os marcadores de posição e os seus parâmetros esperam argumentos variádicos numéricos, mas foram fornecidos números
O índice do argumento variádico em falta é necessário para a string de formato 'format_string'
Este argumento é usado por um especificador de conversão
Este argumento é usado como uma largura de campo
Este argumento é usado como uma questão de precisão
Este argumento é usado como tamanho de buffer
O compilador detetou uma incompatibilidade entre o número de argumentos necessários para satisfazer os marcadores de lugar numa cadeia de formato e o número de argumentos fornecidos. O uso correto das famílias printf e scanf de funções variádicas requer que forneça tantos argumentos quanto especificado pela cadeia de formato. Certos marcadores requerem argumentos adicionais, para especificar a largura, precisão ou tamanho do buffer, bem como um argumento para o conteúdo. Uma incompatibilidade geralmente significa que há um bug no seu código.
Para obter informações sobre os argumentos associados aos espaços reservados de cadeia de caracteres de formato da família printf, consulte Sintaxe de especificação de formato: funções printf e wprintf. Consulte a documentação para obter informações específicas sobre a função funcional.
Este aviso é novo no Visual Studio 2015.
Example
Estes exemplos mostram duas maneiras pelas quais o aviso C4473 pode resultar de uma incompatibilidade de cadeia de caracteres de formato com os seus argumentos, e também mostram como corrigir os problemas.
// c4473p.cpp
// compile with: cl /c /W4 c4473p.cpp
#include <stdio.h>
void print_func(int a, float f)
{
printf_s("This takes %*f arguments.\n", f); // C4473, missing * width argument
printf_s("This takes %*f arguments.\n", a, f); // fix: supply width argument
}
Na primeira mensagem de erro, o compilador deteta que falta um argumento, mas não consegue perceber se o argumento em falta é a largura ou o conteúdo, assumindo que o argumento fornecido é o primeiro, para a largura, e o argumento em falta é o segundo, para o especificador de conversão de tipos. Deve examinar a cadeia de formatos para determinar o argumento realmente em falta.
// c4473s.cpp
// compile with: cl /c /W4 c4473s.cpp
#include <stdio.h>
void scan_func(int a, float f)
{
char name[20];
scanf_s("%s", &name); // C4473, missing buffer size argument
scanf_s("%s", &name, sizeof(name)); // fix: supply buffer size argument
}
Neste exemplo, scanf_s requer dois argumentos para cada marcador de posição, um para fornecer o endereço para escrever e um segundo para fornecer o tamanho do primeiro. Consulte a documentação de cada função da biblioteca para uma explicação dos argumentos necessários.