C6401
تحذير C6401: استخدام < اسم دالة > في إعدادات محلية افتراضية لإجراء يقارن تحسس حالة الأحرف لسلسلة ثابتة < اسم السلسلة >. تعطي نتائج غير متوقعة في لغات غير الإنكليزية
هذا التحذير يشير إلى أن تحسس حالة الأحرف المقارنة إلى سلسلة ثابتة هو قيد التنفيذ عندما يحدد القيمة الافتراضية المحلية؛ وعادة ما لغة مستقلة المقارنة موجهة.
واقتران النموذجية لعيب هذا هو سلوك غير صحيحة في المناطق الكلام بلغة غير اللغة الإنجليزية. على سبيل المثال، في التركية، ".gif" لن مطابقة ".GIF"؛ في الفيتنامية، "تسجيل الدخول" لن مطابقة "تسجيل الدخول".
CompareString تأخذ دالة لغة كـ وسيطة؛ ومع ذلك، pكـsing في لغة الإدخال افتراضية، تشغيل سبيل المثال، الثابت LOCALE_USER_DEFAULT، سيؤدي إلى حدوث السلوك مختلفة في المناطق المختلفة، وفقا للمستخدم الافتراضي. عادة، يجب إنجاز تحسس حالة الأحرف المقارنة s ضد سلسلة ثابتة في لغة مستقلة المقارنة.
إلى تنفيذ مقارنة مستقلة عن لغة تستخدم CompareStringفي نظام التشغيل نظام التشغيل Windows XP، يجب أن تكون معلمة الأولى الثابت LOCALE_INVARIANT؛ تشغيل سبيل المثال، إلى تنفيذ اختبار لغة مستقلة عن ما إذا كنت pStringfile1.gif التلائمات مع تجاهل الاختلافات الحالة العليا/السفلي، باستخدام استدعاء مثل:
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT(“file1.gif”),
-1) == CSTR_EQUAL
مثال
يلي تعليمات برمجية ينشئ هذا التحذير:
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
إلى تصحيح هذا التحذير، استخدم تعليمات برمجية التالية:
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}