Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Argumento inteiro ausente para 'function-name' correspondente ao especificador de conversão 'number'
Comentários
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 número 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é vulnerabilidades de segurança, como vazamentos de informações.
Para garantir a estabilidade e a segurança, sempre corresponda o número e os tipos de argumentos aos especificadores de formato na cadeia de caracteres.
Nome da análise de código: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
Exemplo
O código a seguir gera esse aviso quando a análise de código está habilitada (Propriedades de >Configuração> **Análise de Código ** >Geral>Habilitar Análise de Código on Build) porque usa um número incorreto de argumentos na chamada para sprintf_s e o argumento ausente é um inteiro. Se a função sprintf não segura fosse usada em vez da variante sprintf_smais segura, esse código provavelmente causaria um estouro 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));
}