C6284
C6284 Uyarı: nesne, dize <function> çağrısında gerektiğinde '% d' parametre olarak geçirildi.
Bu uyarı biçim dizesini bir dize örneğin belirtir gösterir, bir %s belirtimi için printf veya scanf, ancak bir C++ nesnesi yerine geçti.
Bu hata, yanlış çıktı veya kilitlenme üretebilir.
Bu iletinin bazı dize türü, örneğin, uygulama bir C++ nesnesi geçirmeden yüzünden sık sık bildirilen std::string, CComBSTR veya bstr_t, içine bir c printf-arama stili.Uygun Dönüþtürme iþleçleri tanımlanıyorsa, c dizeleri gerekli olduğunda C++ sınıf uygulamasına bağlı olarak, diğer bir deyişle, C++ string nesneleri genellikle saydam olarak kullanılabilir; Ancak, çünkü parametreleri printf-stil işlevleri aslında türlenmemiş bir dizeye dönüştürme gerçekleşir.
Nesne türüne bağlı olarak eklemek uygun olabilir bir static_cast uygun dizeyi yazın, örneğin, işleç char * veya TCHAR*, ya da, örneğin, bir dize döndüren bir üye işlev çağırmak için c_str(), örnekleri üzerinde std::string.
Örnek
Bu uyarı için aşağıdaki kod üretir bir CComBSTR için geçirilen sprintf işlevi:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
Aşağıdaki kod, bu uyarı düzeltmek için statik cast kullanır:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}