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

Posted

技术标签:

【中文标题】如何比较参数字符串 Visual C++【英文标题】:How to compare a parameter string Visual C++ 【发布时间】:2013-03-01 17:55:04 【问题描述】:

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

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




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


        //do stuff




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

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

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

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

【问题讨论】:

这是您要找的吗?第二个答案为您提供了一个标准的 char 到 wchar 函数。 ***.com/questions/8032080/… 【参考方案1】:

这里有两个问题:

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

    将宽字符 (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 风格的字符串。

【讨论】:

感谢您的见解。他们很有帮助:)【参考方案2】:
#include <string.h>
void _tmain(int argc, WCHAR *argv[])




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

        //do stuff
   



应该可以的。

【讨论】:

我接受了这个答案,因为它是最简单的。这里的几个答案也很有效,所以我必须根据其他因素进行选择!谢谢大家! @user1784129 可能是最简单的解决方案,但使用 s.th。像wcscmp() 这样可能会严重破坏代码的可移植性。这不是 C++ 标准... 如果您不了解更大且影响深远的区别,则应避免使用_tmainWCHAR。只会让你头疼。【参考方案3】:

试试这个:

#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 代表“帮助”:)

【讨论】:

【参考方案4】:

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

你可以试试……像这样:

if(std::wstring(argv[4]) == std::wstring(L"-h")) 

    // ...

【讨论】:

谢谢。对我有帮助:) @user1784129 顺便说一句:您不应该只寻找代码中的工作解决方案(以'gimme teh codez' 方式),而是要获得解释背景原因的答案。工作与否。

以上是关于如何比较参数字符串 Visual C++的主要内容,如果未能解决你的问题,请参考以下文章

字符串比较在 Visual C++ 2005 中不起作用

使用 C++ 项目 (Visual Studio) 中的参数调用 Python 函数

如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?

如何在 Visual C++ 2010 中打开资源字符串?

如何在 Visual Studio 2008 和 C++ 中显示希腊字符? [复制]

如何在 Visual C++ 中将字节数组转换为十六进制字符串?