strcmp比较LPCTSTR和字符串

时间:2012-03-09 12:30:10

标签: c visual-studio-2010 strcmp lptstr

我正在尝试在我的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被验证。我尝试使用strcmplstrcmp但结果是一样的。

有人可以告诉我,我做错了吗?

感谢。

1 个答案:

答案 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语句。