Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'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