Udostępnij za pośrednictwem


Ostrzeżenie C6064

Brak argumentu liczby całkowitej do "nazwa-funkcji" odpowiadającego specyfikatorowi konwersji "number"

To ostrzeżenie wskazuje, że kod nie dostarcza wystarczającej liczby argumentów, aby dopasować ciąg formatu, a jeden z brakujących argumentów jest liczbą całkowitą.

Uwagi

Ta usterka może spowodować nieprawidłowe dane wyjściowe, a w bardziej niebezpiecznych przypadkach może prowadzić do przepełnienia stosu.

Nazwa analizy kodu: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Przykład

Poniższy kod generuje to ostrzeżenie, ponieważ używa nieprawidłowej liczby argumentów w wywołaniu metody sprintf_s , a brak argumentu jest liczbą całkowitą. Jeśli niebezpieczna funkcja sprintf została użyta zamiast bezpieczniejszego wariantu sprintf_s, ten kod prawdopodobnie spowoduje przepełnienie stosu, a nie tylko nieoczekiwane dane wyjściowe:

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

Aby poprawić to ostrzeżenie, określ brakujące argumenty lub dostosuj ciąg formatu. W tym przykładzie dodamy brakującą wartość całkowitą.

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

Zobacz też

sprintf_s, , _sprintf_s_l, , swprintf_s_swprintf_s_l
C4473