Advertencia C6064

Falta el argumento entero en 'function-name' correspondiente al especificador de conversión 'number'

Esta advertencia indica que el código no proporciona suficientes argumentos para que coincidan con una cadena de formato y uno de los argumentos que faltan es un entero.

Comentarios

Este defecto es probable que cause una salida incorrecta y, en casos más peligrosos, puede provocar desbordamiento de pila.

Nombre del análisis de código: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Ejemplo

El código siguiente genera esta advertencia porque usa un número incorrecto de argumentos en la llamada a sprintf_s y el argumento que falta es un entero. Si se usó la función sprintf no segura en lugar de la variante sprintf_smás segura, este código probablemente provocaría un desbordamiento de pila en lugar de solo una salida 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 corregir esta advertencia, especifique los argumentos que faltan o ajuste la cadena de formato. En este ejemplo, agregamos el valor entero que falta.

void f()
{
    char buff[8];
    const char *string = "Hello";
    sprintf_s(buff, sizeof(buff), "%s %d", string, strlen(string));
}

Consulte también

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473