Partager via


Avertissement C6064

Argument entier manquant en 'function-name' correspondant au spécificateur de conversion 'number'

Cet avertissement indique que le code ne fournit pas suffisamment d’arguments pour correspondre à une chaîne de format et que l’un des arguments manquants est un entier.

Notes

Ce défaut est susceptible de provoquer une sortie incorrecte et, dans des cas plus dangereux, peut entraîner un dépassement de capacité de pile.

Nom de l’analyse du code : MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Exemple

Le code suivant génère cet avertissement, car il utilise un nombre incorrect d’arguments dans l’appel et sprintf_s l’argument manquant est un entier. Si la fonction sprintf non sécurisée a été utilisée au lieu de la variante sprintf_splus sûre, ce code provoquerait probablement un dépassement de capacité de pile au lieu d’une sortie inattendue :

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.
}

Pour corriger cet avertissement, spécifiez les arguments manquants ou ajustez la chaîne de format. Dans cet exemple, nous ajoutons la valeur entière manquante.

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

Voir aussi

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473