Aviso C6064

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));
}

Confira também

sprintf_s, _sprintf_s_l, , swprintf_s_swprintf_s_l
C4473