Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"function" : za mało argumentów przekazanych dla ciągu formatu
symbole zastępcze i ich parametry oczekują argumentów wariadycznych liczb, ale podano liczbę
brak indeksu argumentów wariadycznych jest wymagany przez ciąg formatu "format_string"
ten argument jest używany przez specyfikator konwersji
ten argument jest używany jako szerokość pola
ten argument jest używany jako precyzja
ten argument jest używany jako rozmiar buforu
Kompilator wykrył niezgodność między liczbą argumentów wymaganych do spełnienia symboli zastępczych w ciągu formatu i liczbą podanych argumentów. Poprawne użycie rodzin printf i scanf funkcji wariadycznych wymaga podania jak najwięcej argumentów określonych przez ciąg formatu. Niektóre symbole zastępcze wymagają dodatkowych argumentów, aby określić szerokość, precyzję lub rozmiar buforu, a także argument zawartości. Niezgodność zazwyczaj oznacza, że w kodzie występuje usterka.
Aby uzyskać informacje na temat argumentów skojarzonych z symbolami zastępczymi ciągu formatu rodziny printf, zobacz Składnia specyfikacji formatu: printf i funkcje wprintf. Zapoznaj się z dokumentacją, aby uzyskać informacje specyficzne dla funkcji.
To ostrzeżenie jest nowe w programie Visual Studio 2015.
Przykład
Te przykłady pokazują dwa sposoby ostrzeżenia C4473 może wynikać z niezgodności ciągu formatu z argumentami, a także pokazać, jak rozwiązać problemy.
// c4473p.cpp
// compile with: cl /c /W4 c4473p.cpp
#include <stdio.h>
void print_func(int a, float f)
{
printf_s("This takes %*f arguments.\n", f); // C4473, missing * width argument
printf_s("This takes %*f arguments.\n", a, f); // fix: supply width argument
}
W pierwszym komunikacie o błędzie kompilator wykrywa, że brakuje argumentu, ale nie może stwierdzić, czy brak argumentu jest szerokością, czy zawartością, więc zakłada, że podany argument jest pierwszym, dla szerokości, a brak argumentu jest drugim, dla specyfikatora konwersji typów. Należy zbadać ciąg formatu, aby określić rzeczywisty brakujący argument.
// c4473s.cpp
// compile with: cl /c /W4 c4473s.cpp
#include <stdio.h>
void scan_func(int a, float f)
{
char name[20];
scanf_s("%s", &name); // C4473, missing buffer size argument
scanf_s("%s", &name, sizeof(name)); // fix: supply buffer size argument
}
W tym przykładzie scanf_s wymaga dwóch argumentów dla każdego symbolu zastępczego, jeden, aby podać adres do zapisu, a drugi, aby podać rozmiar pierwszego. Zapoznaj się z dokumentacją każdej funkcji biblioteki, aby uzyskać wyjaśnienie wymaganych argumentów.