0

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

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



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

        //do stuff
}


}

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

有人问过这样的转换问题,但我找到的答案很多,并不简单。我是 C++ 的新手。

我正在寻找的不是指向某些复杂函数的指针,而是要放入我的程序以使其工作的实际代码。

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

4

4 回答 4

1

你在这里有两个问题:

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

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

我建议放弃 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 风格的字符串。

于 2013-03-01T18:08:21.877 回答
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 代表“帮助”:)

于 2013-03-01T17:59:47.597 回答
0
#include <string.h>
void _tmain(int argc, WCHAR *argv[])
{



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

        //do stuff
   }


}

那应该这样做。

于 2013-03-01T18:06:08.367 回答
0

您不能比较指向字符数组的指针(无论 ifWCHAR*char*)来检查它们的内容是否相等(它们指向内存中的东西)。

你可以试试…… 像这样:

if(std::wstring(argv[4]) == std::wstring(L"-h")) 
{
    // ...
}
于 2013-03-01T18:09:05.257 回答