C6067

تحذير C6067: المعلمة <رقم> في استدعاء إلى يجب أن يكون <دالة> العنوان السلسلة

هذا التحذير يشير إلى عدم تطابق بين المحدد التنسيق و المعلمة دالة. على الرغم تحذير يقترح استخدام العنوان للسلسلة، يجب فحص من نوع معلمة دالة تتوقع قبل تصحيح المشكلة. على سبيل المثال، على %sمواصفات printfيتطلب على وسيطة سلسلة، ولكن في %sمواصفات scanfيتطلب العنوان للسلسلة.

Th هو defect هو المحتمل أن تتسبب في تعطل أو تلف بعض نماذج.

مثال

تنشئ التعليمة البرمجية التالية th هو تحذير لأن عددا صحيحاً هو تمرير بدلاً من سلسلة:

#include <stdio.h>
void f_defective( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",1); // warning
  // code ...
}

لتصحيح هذا التحذير، بتمرير سلسلة كمعلمة إلى printfكما هو موضح في التالية تعليمات برمجية:

#include <stdio.h>
void f_corrected( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",str); 
  // code ...
}

تنشئ التعليمة البرمجية التالية th هو تحذير لأن بالمستوى غير صحيح من indirection هو المحددة عند تمرير معلمة، تخزين، إلى scanf:

#include <stdio.h>
void h_defective( )
{
  int retval;
  char* buffer = new char(20);
  if (  buffer )
  {
    retval = scanf("%s", &buffer); // warning C6067
    // code...
    delete buffer ;
  }
}

لتصحيح أعلاه التحذيرات، تمرير المعلمات الصحيحة كما هو موضح فيما يلي تعليمات برمجية:

#include <stdio.h>
void h_corrected( )
{
  int retval;
  char* buffer = new char(20);
  if ( buffer )
  {
    retval = scanf("%s", buffer);
    // code...
    delete buffer;
  }
}

يلي تعليمات برمجية تستخدم الدالات معالجة سلسلة آمن لتصحيح هذا التحذير:

#include <stdio.h>
void f_safe( )
{
  char buff[20];
  int retVal;
  
  sprintf_s( buff, 20, "%s %s", "Hello", "World!" );
  printf_s( "String:\n   %s  %s", "Hello", "World!" );
  retVal = scanf_s("%s", buff, 20);
}

راجع أيضًا:

المرجع

sprintf_s _sprintf_s_l ، swprintf_s ، _swprintf_s_l

printf _printf_l ، wprintf ، _wprintf_l

scanf_s _scanf_s_l ، wscanf_s ، _wscanf_s_l