Aracılığıyla paylaş


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

Ayrıca bkz.

Başvuru

static_cast operatörü

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l