Compartir a través de


Advertencia C6064

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

Comentarios

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.

Proporcionar demasiados argumentos a una función de formato conduce a un comportamiento indefinido porque la función intenta leer valores que no se pasan. Entre las posibles consecuencias se incluyen errores de salida, bloqueos o incluso vulnerabilidades de seguridad, como pérdidas de información.

Para garantizar la estabilidad y la seguridad, asegúrate de que el número y los tipos de argumentos coincidan con los especificadores de formato de la cadena.

Nombre de análisis de código: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Ejemplo

El código siguiente genera esta advertencia cuando se habilita el análisis de código (propiedades > del proyecto Propiedades> de configuración **Análisis de código ** >General>Enable Code Analysis on Build) 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