1

当我尝试解析命令行参数时,我遇到了一个奇怪的错误。为什么我说它很奇怪?嗯,那是因为我之前已经对 C++ 中的命令行解析做了很多研究,而且没有人的测试代码可以在我的 Visual Studio 2010 IDE 上运行。当我使用调试器时,我发现当我尝试检查参数时总是返回 FALSE。在下面的示例中,当我执行 if (argv[1] == "-in") 时。我尝试在监视窗口中以几种不同的方式对其进行测试。我试着先把它传递给一个字符串。或者使用单引号。然后我在互联网上搜索并使用了其他人的代码,据说这些代码可以正常工作。我究竟做错了什么?这是我在 Visual Studio 环境中设置错误的设置吗?

这是我最初的

#include <iostream>
#include <stdlib.h>
#include <sstream>
#include <fstream>

using namespace std;





int main(int argc, char * argv []) //Usage FileSplitter -in [filename] -sz [chunk size]
{

if (argc==5)
    {
    string strTest = argv[1];
    if ((argv[1] == "-in") && (argv[3] == "-sz"))
                 {
                        //Code here
                 }
    }
}

无论如何,那是我的原始代码。我已经尝试对其进行多次调整,并尝试使用以下网站的代码...

http://www.cplusplus.com/forum/articles/13355/ 他有一些比较 argv[1] 和字符串的例子......他说它有效。

http://www.cplusplus.com/forum/unices/26858/ 还有一个人在这里发布了一些关于比较的代码。在 Ryan Caywood 的帖子下。

当我尝试进行比较时,它们对我不起作用。我正在考虑只做一个合法的 strcmp,但我想知道为什么我的 Visual Studio 环境没有像在其他人的系统上那样编译?

另外,在调试过程中,我在项目属性的调试部分输入命令行参数。我不知道这是否会影响任何事情。我也尝试构建和运行该项目,但可惜,一切都无济于事。提前感谢任何能给我一些好的建议的人。

4

2 回答 2

2

参数是通过 c 字符串传递的,所以如果我没记错的话,使用 == 比较它们只会比较指向它们的指针。尝试使用 strcmp() 比较两个 c 字符串,或者将两者都转换为 c++ 字符串并以这种方式进行比较,如果必须的话。

于 2012-05-21T01:43:33.370 回答
1

您正在错误地进行字符串比较。

要么使用 C 风格,strcmp()要么(如您提到的链接中建议的那样),string首先转换为 C++ 风格。

if (string(argv[i]) == "stuff") { ... }
于 2012-07-25T12:47:33.490 回答