Compilerwarnung (Ebene 1) C4473

'function' : nicht genügend Argumente, die für die Formatzeichenfolge übergeben werden
Platzhalter und deren Parameter erwarten variadische Zahlenargumente, die Zahl wurde jedoch bereitgestellt.
Der fehlende variadische Argumentindex ist für die Formatzeichenfolge "format_string" erforderlich.
Dieses Argument wird von einem Konvertierungsbezeichner verwendet.
Dieses Argument wird als Feldbreite verwendet.
Dieses Argument wird als Genauigkeit verwendet.
Dieses Argument wird als Puffergröße verwendet.

Der Compiler hat einen Konflikt zwischen der Anzahl der Argumente erkannt, die erforderlich sind, um die Platzhalter in einer Formatzeichenfolge zu erfüllen, und der Anzahl der bereitgestellten Argumente. Die korrekte Verwendung der Printf- und Scanf-Familien von variadischen Funktionen erfordert, dass Sie so viele Argumente wie in der Formatzeichenfolge angegeben angeben. Für bestimmte Platzhalter sind zusätzliche Argumente erforderlich, um die Breite, Genauigkeit oder Puffergröße sowie ein Argument für den Inhalt anzugeben. Ein Konflikt bedeutet im Allgemeinen, dass in Ihrem Code ein Fehler auftritt.

Informationen zu den Argumenten, die den Platzhaltern des Printf-Familienformats zugeordnet sind, finden Sie unter Formatspezifikationssyntax: printf- und wprintf-Funktionen. Informationen zu Funktionsfunktionen finden Sie in der Dokumentation.

Diese Warnung ist neu in Visual Studio 2015.

Beispiel

In diesen Beispielen werden zwei Möglichkeiten gezeigt, wie die Warnung C4473 aus einem Formatzeichenfolgenkonflikt mit ihren Argumenten resultieren kann und wie Sie die Probleme beheben können.

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

In der ersten Fehlermeldung erkennt der Compiler, dass ein Argument fehlt, kann aber nicht erkennen, ob das fehlende Argument die Breite oder der Inhalt ist. Daher wird davon ausgegangen, dass das angegebene Argument der erste ist, für die Breite, und das fehlende Argument ist der zweite für den Typkonvertierungsbezeichner. Sie müssen die Formatzeichenfolge untersuchen, um das tatsächliche fehlende Argument zu ermitteln.

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

In diesem Beispiel erfordert scanf_s zwei Argumente für jeden Platzhalter, eine, in die die Adresse geschrieben werden soll, und eine Sekunde, um die Größe der ersten zu liefern. Überprüfen Sie die Dokumentation für jede Bibliotheksfunktion, um eine Erläuterung der erforderlichen Argumente zu finden.