Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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));
}