C6066

تحذير C6066: المؤشر غير الذي تم تمريره كمعلمة <رقم> عند المؤشر هو مطلوبة في الدعوة إلى <دالة>

Th هو التحذير يشير إلى أن تحدد سلسلة التنسيق التي مؤشر هو المطلوبة، على سبيل المثال، على %nأو %pمواصفات printf أو %dل scanf، ولكن مؤشر-ليس هو التي يتم تمريرها. Th هو defect هو المحتمل أن تتسبب في تعطل أو تلف بعض نماذج.

مثال

يلي تعليمات برمجية ينشئ هذا التحذير:

#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 ...
}

لتصحيح هذا التحذير، التالية تعليمات برمجية يقوم بتمرير المعلمات الصحيحة إلى sprintfو scanfوظائف:

#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 ...
}

التعليمة البرمجية التالية باستخدام الدالات معالجة سلسلة آمن — sprintf_sو scanf_s-إلى تصحيح هذا التحذير:

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 ...
}

Th هو تحذير هو عادة بالإعلام لأن تم استخدام عدد صحيح من أجل %pتنسيق بدلاً من المؤشر. استخدام عدد صحيح في ترتيب هو المثيل هو غير المحمولة لأجهزة كمبيوتر 64 بت.

راجع أيضًا:

المرجع

sprintf_s _sprintf_s_l ، swprintf_s ، _swprintf_s_l

scanf_s _scanf_s_l ، wscanf_s ، _wscanf_s_l