C6067
Aktualisiert: November 2007
C6067
Warnung C6067: Der <Nummer>-Parameter im Aufruf von <Funktion> muss die Adresse der Zeichenfolge sein.
Diese Warnung weist auf einen Konflikt zwischen dem Formatbezeichner und dem Funktionsparameter hin. Obwohl die Warnung die Verwendung der Adresse der Zeichenfolge vorschlägt, müssen Sie den Parametertyp überprüfen, den eine Funktion erwartet, bevor Sie das Problem beheben. So ist beispielsweise für eine %s-Spezifikation für printf einen Zeichenfolgenargument erforderlich, aber für eine %s-Spezifikation in scanf ist eine Adresse der Zeichenfolge erforderlich.
Dieser Fehler kann zu einem Absturz oder einer Beschädigung führen.
Beispiel
Im folgenden Code wird diese Warnung generiert, da statt einer Zeichenfolge eine ganze Zahl übergeben wird:
#include <stdio.h>
void f_defective( )
{
char *str = "Hello, World!";
printf("String:\n %s",1); // warning
// code ...
}
Um die Warnung zu korrigieren, übergeben Sie eine Zeichenfolge als Parameter an printf, wie im folgenden Code dargestellt:
#include <stdio.h>
void f_corrected( )
{
char *str = "Hello, World!";
printf("String:\n %s",str);
// code ...
}
Der folgende Code generiert diese Warnung, weil bei der Übergabe des Parameters oder Puffers an scanf eine falsche Dereferenzierungsebene angegeben wird:
#include <stdio.h>
void h_defective( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", &buffer); // warning C6067
// code...
delete buffer ;
}
}
Um die oben genannten Warnungen zu korrigieren, übergeben Sie den richtigen Parameter, wie im folgenden Code dargestellt:
#include <stdio.h>
void h_corrected( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", buffer);
// code...
delete buffer;
}
}
Im folgenden Code werden Funktionen zur sicheren Zeichenfolgenbearbeitung verwendet, um diese Warnung zu korrigieren:
#include <stdio.h>
void f_safe( )
{
char buff[20];
int retVal;
sprintf_s( buff, 20, "%s %s", "Hello", "World!" );
printf_s( "String:\n %s %s", "Hello", "World!" );
retVal = scanf_s("%s", buff, 20);
}
Siehe auch
Referenz
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l