Aviso C6064

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

Consulte também

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473