strcmp لمقارنة LPCTSTR والسلسلة
-
10-12-2019 - |
سؤال
أحاول المقارنة في برنامج C الخاص بي بين سلسلة و LPCTSTR.
إليك ما قمت به حتى الآن (تم تبسيط الكود ليشمل فقط ما يمثل مشكلة):
DWORD main(DWORD ac, LPCTSTR *av)
{
DWORD cpt = 1;
while (++i < ac)
{
if (strcmp(av[i], "value"))
printf("1 : OK\n");
else if (strcmp(av[i], _T("value")))
printf("2 : OK\n");
else if (strcmp(av[i], (LPCTSTR)"value"))
printf("3 : OK\n");
}
return EXIT_SUCCESS;
}
عندما أقوم بتنفيذ برنامجي باستخدام المعلمة الأولى "القيمة"، يبدو أن أياً من المعلمات if
تم التحقق منها.حاولت مع strcmp
و lstrcmp
ولكن النتائج هي نفسها.
هل يمكن لأحد أن يقول لي ما أفعله خطأ من فضلك؟
شكرًا.
المحلول
strcmp
وعودة العائلة 0
للإشارة إلى أن السلاسل متساوية.المنطق الخاص بك هو ببساطة الطريق الخاطئ.
يجب عليك كتابة الاختبار مثل هذا:
if (strcmp(av[i], "value")==0)
جانبا، الاثنان الآخران if
البيانات، مقارنة مع _T("value")
و (LPTSTR)"value"
تعتبر جيدة عند التحويل البرمجي لـ ANSI، ولكنها غير صحيحة عند التحويل البرمجي لـ Unicode.عند التجميع لـ Unicode، _T("value")
سيتم تقييمه إلى سلسلة واسعة وبالتالي لن يكون وسيطة صالحة لـ strcmp
.هذا خطأ في الترجمة.و (LPTSTR)"value"
سيكون أيضًا خطأ في الترجمة بسبب LPTSTR
سيكون سلسلة واسعة.لكن طاقم الممثلين سيكون مزيفًا تمامًا أيضًا.على أي حال، أنا فقط أذكر هذه المشكلات من أجل الاكتمال، لكنني أفهم أنه تمت إضافة هذه العبارات الإضافية أثناء محاولتك تصحيح المشكلة الجذرية.