Uyarı C6067

'function' çağrısındaki 'number' parametresi dizenin adresi olmalıdır

Açıklamalar

Bu uyarı, biçim tanımlayıcısı ile işlev parametresi arasında bir uyuşmazlık olduğunu gösterir. Uyarı dizenin adresini kullanmayı önerse de, sorunu düzeltmeden önce bir işlevin beklediği parametre türünü denetlemeniz gerekir. Örneğin, için %s belirtim printf bir dize bağımsız değişkeni gerektirir, ancak içindeki %s belirtim scanf dizenin adresini gerektirir.

Bu hata büyük olasılıkla bir kilitlenmeye veya bir formun bozulmasına neden olabilir.

Kod analizi adı: NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION

Örnekler

Dize yerine bir tamsayı geçirildiğinden aşağıdaki kod bu uyarıyı oluşturur:

#include <stdio.h>

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

Uyarıyı düzeltmek için, aşağıdaki kodda gösterildiği gibi bir dizeyi printf parametresi olarak geçirin:

#include <stdio.h>

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

parametresi, arabellek geçirilirken yanlış bir dolaylılık düzeyi belirtildiğinden aşağıdaki kod bu uyarıyı scanfoluşturur:

#include <stdio.h>

void h_defective()
{
  int retval;
  char* buffer = new char(20);
  if (buffer)
  {
    retval = scanf("%s", &buffer); // warning C6067
    // code...
    delete buffer;
  }
}

Yukarıdaki uyarıları düzeltmek için aşağıdaki kodda gösterildiği gibi doğru parametreyi geçirin:

#include <stdio.h>

void h_corrected()
{
  int retval;
  char* buffer = new char(20);
  if (buffer)
  {
    retval = scanf("%s", buffer);
    // code...
    delete buffer;
  }
}

Aşağıdaki kod, bu uyarıyı düzeltmek için güvenli dize işleme işlevlerini kullanır:

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

Ayrıca bkz.

Biçim belirtimi söz dizimi: printf ve wprintf işlevleri
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