Freigeben über


Warnung C6067

Der Parameter 'number' im Aufruf von 'function' muss die Adresse der Zeichenfolge sein.

Hinweise

Diese Warnung gibt einen Konflikt zwischen dem Formatbezeichner und dem Funktionsparameter an. Obwohl die Warnung die Verwendung der Adresse der Zeichenfolge vorschlägt, müssen Sie den Typ des Parameters überprüfen, den eine Funktion erwartet, bevor Sie das Problem beheben. Beispielsweise erfordert eine %s Spezifikation für printf ein Zeichenfolgenargument, aber eine %s Spezifikation scanf in erfordert eine Adresse der Zeichenfolge.

Dieser Fehler verursacht wahrscheinlich einen Absturz oder eine Beschädigung irgendeiner Form.

Codeanalysename: NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION

Beispiel

Der folgende Code generiert diese Warnung, da eine ganze Zahl anstelle einer Zeichenfolge übergeben wird:

#include <stdio.h>

void f_defective()
{
  char *str = "Hello, World!";
  printf("String:\n %s", 1);
  // code ...
}

Um die Warnung zu korrigieren, übergeben Sie eine Zeichenfolge als Parameter 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, da beim Übergeben des Parameters, puffers an scanf:

#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 obige 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;
  }
}

Der folgende Code verwendet sichere Zeichenfolgenmanipulationsfunktionen, 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

Syntax der Formatspezifikation: printf- und wprintf-Funktionen
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
C4313
C4477