strcmp для сравнения LPCTSTR и строки - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь сравнить в моей 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 Ответ

3 голосов
/ 09 марта 2012

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

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

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

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

...