如何比较参数字符串 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++ 标准...
如果您不了解更大且影响深远的区别,则应避免使用_tmain
和WCHAR
。只会让你头疼。【参考方案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++的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ 项目 (Visual Studio) 中的参数调用 Python 函数
如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?