Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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));
}