如何比较参数字符串Visual C ++

时间:2013-03-01 17:55:04

标签: c++

我想做一些简单的事情:检查参数是什么。

void _tmain(int argc, WCHAR *argv[])
{



if(argv[4] == "-h");
{

        //do stuff
}


}

我收到了从WCHAR *到const char *的不兼容错误。

这样的转换问题已被提出,但我找到的答案很多而且不简单。我是C ++的新手。

我正在寻找的不是指向某些复杂函数的指针,而是指向我的程序中使用它的实际代码。

只是寻找一些简单,直接,有效的代码。谢谢!

4 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 将“指向char”的指针与字符串对象的逻辑概念相关联。在C(和C ++)中,指向charchar*)的指针按惯例只是一个C风格的字符串。我的意思是,如果你终止它(\0)并使用适当的库方法。因为指向char的指针不是实际的字符串类型,所以您正在执行指针相等而不是逻辑相等。

  2. 将宽字符(L"A")与窄字符("A")混淆。这是两个截然不同的概念,不太可能对您有所帮助。

  3. 我建议放弃Unicode入口点:

    /* do you really want C or C++? */
    int main(int argc, char **argv)
    {
        /* now we're "narrow" characters, which will be more natural for you */
    

    改进测试(或使用getopt):

        if (0 == strcmp(argv[4], "-h"))
        {
            /* argv[4] is equal to "-h" */
    

    如果您真的想要C ++,那么您应该使用std::string而不是旧的C风格字符串。

答案 1 :(得分:0)

试试这个:

#include <string>


void _tmain(int argc, WCHAR *argv[])
{
    typedef std::basic_string<WCHAR> string_type;
    static const string_type help( TEXT("-h") );

    if(argv[4] == help);
    {
        //do stuff
    }
...
}

我认为TEXT宏仍然存在 - 多年来我没有做过任何windows c ++编程。

我还假设-h代表“帮助”:)

答案 2 :(得分:0)

#include <string.h>
void _tmain(int argc, WCHAR *argv[])
{



   if( 0 == wcscmp(argv[4], L"-h") )
   {

        //do stuff
   }


}

应该这样做。

答案 3 :(得分:0)

您无法将指针与字符数组(无论WCHAR*还是char*)进行比较,以检查其内容是否相等(这些内容指向内存中)

你可以试试s.th.像这样:

if(std::wstring(argv[4]) == std::wstring(L"-h")) 
{
    // ...
}