Condividi tramite


Avviso C6064

Argomento integer mancante in 'function-name' corrispondente all'identificatore di conversione 'number'

Questo avviso indica che il codice non fornisce argomenti sufficienti per trovare una corrispondenza con una stringa di formato e uno degli argomenti mancanti è un numero intero.

Osservazioni:

Questo difetto può causare un output errato e, in casi più pericolosi, può causare un overflow dello stack.

Nome dell'analisi del codice: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Esempio

Il codice seguente genera questo avviso perché usa un numero errato di argomenti nella chiamata a sprintf_s e l'argomento mancante è un numero intero. Se la funzione sprintf unsafe è stata usata invece della variante sprintf_spiù sicura, è probabile che questo codice causi un overflow dello stack anziché solo un output imprevisto:

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

Per correggere l'avviso, specificare argomenti mancanti o modificare la stringa di formato. In questo esempio viene aggiunto il valore intero mancante.

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

Vedi anche

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473