C6066
C6066 Uyarı: işaretçi olmayan <number> parametre olarak geçildi <function> yapılan çağrıda işaretçi ne zaman gerekli
Biçim dizesi bir işaretçi gibi gerekli olduğunu belirtir, bu uyarı gösterir bir %n veya %p printf belirtimi veya bir %d için scanf, ancak işaretçiyi olmayan geçirilir.Bu büyük bir olasılıkla çökmesi ya da bazı form bozulmasını neden bozukluğudur.
Örnek
Aşağıdaki kod, bu uyarı oluşturur:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", 1, MAX ); //warning C6066
// code ...
}
void g( int i )
{
int result;
result = scanf( "%d", i ); // warning C6066
// code ...
}
Bu uyarı düzeltmek için aşağıdaki kodu doğru parametreleri geçirir sprintf ve scanf işlevleri:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", buff, MAX ); // pass buff
// code ...
}
void g( int i )
{
int result;
// code ...
result = scanf( "%d", &i ); // pass the address of i
// code ...
}
Aşağıdaki kodu güvenli dize işleme işlevlerini kullanın — sprintf_s ve scanf_s — bu uyarıyı düzeltmek için:
void f( )
{
char buff[MAX];
sprintf_s( buff, sizeof(buff), "%s %p %d", "Hello, World!", buff, MAX );
// code ...
}
void g( int i )
{
int result;
// code ...
result = scanf_s( "%d", &i );
// code ...
}
Tamsayı için kullanılan çünkü bu uyarı genel olarak bildirilen bir %p biçimi yerine bir işaretçi.Bu durumda, bir tamsayı değer kullanarak 64 bitlik bilgisayarlar için taşınabilir değildir.