Share via


Upozornění kompilátoru (úroveň 1) C4473

'function' : nedostatek argumentů předaných pro formátovací řetězec
zástupné symboly a jejich parametry očekávají číselné variadické argumenty, ale zadali jsme číslo .
Chybějící index argumentu variadic je vyžadován formátovacím řetězcem "format_string".
tento argument používá specifikátor převodu.
tento argument se používá jako šířka pole.
tento argument se používá jako přesnost.
tento argument se používá jako velikost vyrovnávací paměti.

Kompilátor zjistil neshodu mezi počtem argumentů požadovaných pro splnění zástupných symbolů v řetězci formátu a počtem zadaných argumentů. Správné použití řad printf a scanf funkcí variadic vyžaduje, abyste zadali tolik argumentů, kolik je určeno formátovacím řetězcem. Některé zástupné symboly vyžadují další argumenty k určení šířky, přesnosti nebo velikosti vyrovnávací paměti a také argumentu pro obsah. Neshoda obecně znamená, že kód obsahuje chybu.

Informace o argumentech přidružených k zástupným symbolům řetězce formátu řady printf naleznete v tématu Syntaxe specifikace formátu: funkce printf a wprintf. Informace specifické pro funkci funkce najdete v dokumentaci.

Toto upozornění je nové v sadě Visual Studio 2015.

Příklad

Tyto ukázky ukazují dva způsoby, jak může upozornění C4473 vést k neshodě formátovaného řetězce s argumenty a také ukazují, jak tyto problémy opravit.

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

V první chybové zprávě kompilátor zjistí, že chybí argument, ale nemůže zjistit, jestli je chybějící argument šířkou nebo obsahem, takže předpokládá, že zadaný argument je první argument pro šířku a chybějící argument je druhý argument pro specifikátor převodu typu. Chcete-li zjistit skutečný chybějící argument, je nutné prozkoumat formátovací řetězec.

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

V tomto příkladu scanf_s vyžaduje pro každý zástupný symbol dva argumenty, jeden pro zadání adresy pro zápis a sekundu pro zadání velikosti prvního. Vysvětlení požadovaných argumentů najdete v dokumentaci pro každou funkci knihovny.