Share via


Derleyici Uyarısı (düzey 1) C4473

'function' : biçim dizesi için yeterli bağımsız değişken geçirilmedi
yer tutucular ve parametreleri sayı variadic bağımsız değişkenleri bekler, ancak sayı sağlanmıştır
'format_string' biçim dizesi için eksik variadic bağımsız değişken dizini gerekiyor
Bu bağımsız değişken bir dönüştürme tanımlayıcısı tarafından kullanılır
bu bağımsız değişken alan genişliği olarak kullanılır
bu bağımsız değişken bir duyarlık olarak kullanılır
bu bağımsız değişken arabellek boyutu olarak kullanılır

Derleyici, bir biçim dizesindeki yer tutucuları karşılamak için gereken bağımsız değişkenlerin sayısıyla sağlanan bağımsız değişkenlerin sayısı arasında bir uyuşmazlık algılamıştı. Variadic işlevlerin printf ve scanf ailelerinin doğru kullanımı, biçim dizesi tarafından belirtilen sayıda bağımsız değişken sağlamanızı gerektirir. Bazı yer tutucular, ek bağımsız değişkenlerin yanı sıra içerik için bir bağımsız değişkenin yanı sıra genişliği, duyarlığı veya arabellek boyutunu belirtmenizi gerektirir. Uyuşmazlık genellikle kodunuzda bir hata olduğu anlamına gelir.

printf ailesi biçim dizesi yer tutucularıyla ilişkili bağımsız değişkenler hakkında bilgi için bkz . Biçim belirtimi söz dizimi: printf ve wprintf işlevleri. İşlev işlevine özgü bilgiler için belgelere bakın.

Bu uyarı Visual Studio 2015'te yenidir.

Örnek

Bu örnekler, C4473'in bağımsız değişkenleriyle biçim dizesi uyuşmazlığından kaynaklanabilir uyarısının iki yolunu gösterir ve ayrıca sorunların nasıl çözüleceğini gösterir.

// c4473p.cpp
// compile with: cl /c /W4 c4473p.cpp
#include <stdio.h>

void print_func(int a, float f)
{
    printf_s("This takes %*f arguments.\n", f); // C4473, missing * width argument
    printf_s("This takes %*f arguments.\n", a, f); // fix: supply width argument
}

İlk hata iletisinde, derleyici bir bağımsız değişkenin eksik olduğunu algılar, ancak eksik bağımsız değişkenin genişlik mi yoksa içerik mi olduğunu anlayamaz, bu nedenle sağlanan bağımsız değişkenin genişlik için birinci, eksik bağımsız değişkenin ise tür dönüştürme tanımlayıcısı için ikinci bağımsız değişken olduğunu varsayar. Gerçek eksik bağımsız değişkeni belirlemek için biçim dizesini incelemeniz gerekir.

// c4473s.cpp
// compile with: cl /c /W4 c4473s.cpp
#include <stdio.h>

void scan_func(int a, float f)
{
    char name[20];

    scanf_s("%s", &name);                // C4473, missing buffer size argument
    scanf_s("%s", &name, sizeof(name));  // fix: supply buffer size argument
}

Bu örnekte, scanf_s her yer tutucu için biri yazacak adresi, diğeri de birincinin boyutunu sağlamak için olmak üzere iki bağımsız değişken gerektirir. Gerekli bağımsız değişkenlerin açıklaması için her kitaplık işlevinin belgelerine bakın.