我正在尝试在我的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;
}
当我使用第一个参数“value”执行我的程序时,似乎没有if
被验证。我尝试使用strcmp
和lstrcmp
但结果是一样的。
有人可以告诉我,我做错了吗?
感谢。
答案 0 :(得分:3)
strcmp
和系列返回0
表示字符串相等。你的逻辑只是错误的方式。
您应该像这样编写测试:
if (strcmp(av[i], "value")==0)
另外,在编译ANSI时,与if
和_T("value")
进行比较的其他两个(LPTSTR)"value"
语句都很好,但在编译Unicode时则不正确。编译Unicode时,_T("value")
将计算为宽字符串,因此不是strcmp
的有效参数。这是编译错误。 (LPTSTR)"value"
也是一个编译错误,因为LPTSTR
是一个宽字符串。但演员也会完全虚假。无论如何,我只是提到这些问题的完整性,但我确实理解在你试图调试根问题时添加了这些额外的if语句。