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