2012-05-21 40 views
1

当我尝试分析命令行参数时出现奇怪的错误。我为什么称它奇怪?那么,那是因为我事先就C++中的命令行解析进行了大量的研究,没有人的测试代码在我的visual studio 2010 IDE上工作。当我使用调试器时,我发现当我尝试检查参数时,总是返回FALSE。在下面的例子中,我做了一个if(argv [1] ==“-in”)。我试着在观察窗口中以几种不同的方式进行测试。我试着先把它传递给一个字符串。或者使用单引号。然后,我搜索了互联网,并使用了其他人的代码,他们认为这些代码能够起作用。我究竟做错了什么?这是我在Visual Studio环境中设置错误的设置吗?解析C++中的命令行参数。我遇到一个奇怪的错误

这是我原本

#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,但我想知道为什么我的视觉工作室环境不像其他人的系统那样编译?

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

回答

2

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

+0

是的,我知道关于strcmp,如上所述。我得到它使用strcmp工作,但这并不能回答我的问题。为什么它适用于其他人,但不是我?我也尝试通过声明一个字符串变量并将argv传递给它来尝试将其转换为C++字符串格式,但这也不起作用。 – Klik

+0

据我所知,它不应该为其他任何人工作,也许这是一个编译器特定的事情,但不知道。 – RoneRackal

+0

在我发布的其中一个链接是一个人问这个具体问题,并在收到建议后使用,“如果(argv [1] ==”-t“)”他说它运作良好。我发布的另一个链接是解析命令行参数的教程。我完全复制了代码,但它不适用于我。嗯... – Klik

1

你正在做的字符串比较不正确。

要么使用strcmp()或者(就像你提到的链接中建议的那样)使用C风格,首先转换为C++风格string

if (string(argv[i]) == "stuff") { ... }