strcmp для сравнения LPCTSTR и строки

Я пытаюсь сравнить в моей 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 но результаты одинаковы.

Может кто-нибудь сказать мне, что я делаю не так, пожалуйста?

Благодарю.

1 ответ

Решение

strcmp и семья возвращается 0 чтобы указать, что строки равны. Ваша логика просто неправильная.

Вы должны написать тест так:

if (strcmp(av[i], "value")==0)

В сторону, два других if заявления, по сравнению с _T("value") а также (LPTSTR)"value" хороши при компиляции для ANSI, но неверны при компиляции для Unicode. При компиляции для Unicode, _T("value") будет оцениваться в широкой строке и, следовательно, не будет действительным аргументом для strcmp, Это ошибка компиляции. А также (LPTSTR)"value" также будет ошибка компиляции, потому что LPTSTR будет широкая строка. Но актерский состав также был бы полностью поддельным. В любом случае, я просто упоминаю эти проблемы для полноты, но я понимаю, что эти дополнительные операторы if были добавлены, когда вы пытались отладить корневую проблему.

Другие вопросы по тегам