سؤال

أحاول المقارنة في برنامج 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 سيكون سلسلة واسعة.لكن طاقم الممثلين سيكون مزيفًا تمامًا أيضًا.على أي حال، أنا فقط أذكر هذه المشكلات من أجل الاكتمال، لكنني أفهم أنه تمت إضافة هذه العبارات الإضافية أثناء محاولتك تصحيح المشكلة الجذرية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top