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.
Argumento inteiro ausente para 'nome da função' correspondente ao especificador de conversão 'número'
Observações
Esse aviso indica que o código não fornece argumentos suficientes para corresponder a uma cadeia de caracteres de formato e um dos argumentos ausentes é um inteiro.
Fornecer poucos argumentos para uma função de formato leva a um comportamento indefinido porque a função tenta ler valores que não são passados. As possíveis consequências incluem saída incorreta, falhas ou até mesmo vulnerabilidades de segurança, como vazamentos de informações.
Para garantir estabilidade e segurança, sempre combine o número e os tipos de argumentos com os especificadores de formato na cadeia de caracteres.
Nome da análise de código: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
Example
O código seguinte gera este aviso quando a análise de código está ativada (Propriedades >do projeto Propriedades de Configuração> **Análise de Código ** >Geral>Ativar Análise de Código na Compilação) porque utiliza um número incorreto de argumentos na chamada para sprintf_s e o argumento em falta é um inteiro. Se a função sprintf unsafe fosse usada em vez da variante sprintf_s, mais segura, este código provavelmente causaria um overflow de pilha em vez de apenas uma saída inesperada.
void f()
{
char buff[8];
const char *string="Hello";
sprintf_s(buff, sizeof(buff), "%s %d", string); // Attempts to print "Hello "
// followed by a number up to eleven characters long, depending on the garbage
// found on the stack. Any number other than a single non-negative digit can't
// fit in the 8 char buffer and leave room for the trailing null. If sprintf
// had been used instead, it would overflow.
}
Para corrigir esse aviso, especifique os argumentos ausentes ou ajuste a cadeia de caracteres de formato. Neste exemplo, adicionamos o valor inteiro ausente.
void f()
{
char buff[8];
const char *string = "Hello";
sprintf_s(buff, sizeof(buff), "%s %d", string, strlen(string));
}