C6284

تحذير C6284: الكائن الذي تم تمريره كمعلمة '% d' عندما سلسلة هو المطلوبة في استدعاء <دالة>.

هذا التحذير يشير إلى أن تحدد سلسلة التنسيق سلسلة، ل مثال، على %sمواصفات printfأو scanf، ولكن تم تمرير كائن C + + بدلاً من ذلك.

قد تعطي عيب هذا الإخراج غير صحيحة أو الأعطال.

غالباً ما يتم الإعلام عن هذه الرسالة نظراً لتمرير كائن C + + تنفيذ بعض نوع السلسلة، على سبيل المثال، std::string، CComBSTRأو bstr_t، في C printf-النمط المكالمة. استناداً إلى تطبيق فئة C + +، التي هو، إذا كان تحويل المناسبة يتم تعريف عوامل تشغيل، C + + سلسلة الالكائنات يمكنك غالباً استخدام شفافية كلما السلاسل C مطلوبة؛ تشغيل الرغم من ذلك، لأن المعلمات إلى printf-النمط الدالات مصنف بشكل أساسي، يحدث لا تحويل إلى سلسلة.

Depending on the object, it might be appropriate to insert a static_cast operator to the appropriate string type, for example, char * or TCHAR *, or to call a member function which returns a string, for example, c_str(), on instances of std::string.

مثال

تنشئ التعليمة البرمجية التالية th هو تحذير لأن CComBSTRهو التي تم تمريرها إلى sprintfدالة:

#include <atlbase.h>
#include <stdlib.h>

void f()
{
  char buff[50];
  CComBSTR bstrValue("Bye");
 
  sprintf(buff,"%ws",bstrValue); 
}

يلي تعليمات برمجية يستخدم فريق العمل الثابتة لتصحيح هذا التحذير:

#include <atlbase.h>
#include <stdlib.h>

void f()
{
  char buff[50];
  CComBSTR bstrValue("Bye");
  
  sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}

راجع أيضًا:

المرجع

static_cast Operator

sprintf_s _sprintf_s_l ، swprintf_s ، _swprintf_s_l