Freigeben über


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

printf, _printf_l, wprintf, _wprintf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l