C6209
تحذير C6209: استخدام sizeof <variable1> كمعلمة <رقم> في استدعاء إلى <دالة> الموقع <variable2> قد يكون صفيفة أحرف كبيرة، هل كنت إلى استخدام عدد حرف/ حروف بدلاً من عدد بايت؟
هذا التحذير يشير إلى أن معلمة إلى استدعاء دالة غير صحيح قد حساباً البايت بدلاً من حرف العدد. إذا كان th هو هو الحالة، th هو defect هو المحتمل أن تتسبب لذاكرة تلف أو برنامج عطل، على الرغم من أن بعض الحالات قد تتسبب في حدوث فجوة الأمان exploitable.
سبب شائع لترتيب هو defect هو استخدام sizeofتشغيل صفيفة حرف. sizeofالعامل دائماً تحسب رقم. وحدات البايت ل ANSI أحرف th هو هو نفس العدد من حرف/ حروف؛ ومع ذلك، على Unicode حرف/ حروف هو مرتين عدد حرف/ حروف.
هو عادة آمنة لحساب عدد العناصر في صفيفة بواسطة قسمة الحجم الصفيفة بالالحجم لكل عنصر.
Th هو تحذير هو التي تم إنشاؤها عند:
هو متغير pكـsed كـ معلمة واحدة و sizeofهذا المتغير هو pكـsed كـ معلمة أخرى.
كل من نوع متغير و نوع معلمة رسمية يتم بعض العديد من المؤشر إلى مستوى حرف.
مثال
The following sample code generates this warning because sizeof pC is passed to my_wcsncpy function:
#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);
void f( )
{
WCHAR pC[15];
wchar_t* input = L"Hello, World!";
my_wcsncpy(pC, input, sizeof pC);
// code ...
}
لتصحيح هذا التحذير، تمرير الحجم الصحيح كما هو موضح فيما يلي تعليمات برمجية:
#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);
void f( )
{
WCHAR pC[15];
wchar_t* input = L"Hello, World!";
my_wcsncpy(pC, input, (sizeof pC) / (sizeof pC[0]));
// code ...
}
يجب ملاحظة أن يكون heuristic استخدام غير صحيح لبعض تعليمات برمجية الأنماط؛ ولذلك، هذا التحذير قد لا تتطابق مع إلى عيب فعلى في تعليمات برمجية.