【问题标题】:Parsing Command Line Parameters in C++. I'm having a strange error在 C++ 中解析命令行参数。我有一个奇怪的错误
【发布时间】:2014-03-04 07:18:22
【问题描述】:

我在尝试解析命令行参数时遇到了一个奇怪的错误。为什么我说它很奇怪?嗯,那是因为我之前已经对 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 环境没有像在其他人的系统上那样编译?

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

【问题讨论】:

    标签: parsing command-line parameters argv


    【解决方案1】:

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

    【讨论】:

    • 是的,我知道 strcmp,如上所述。我使用 strcmp 让它工作,但这并不能回答我的问题。为什么它对其他人有效,但对我无效?我还尝试通过声明一个字符串变量并将 argv 传递给它来将其转换为 c++ 字符串格式,但这也不起作用。
    • 据我所知,它不应该适用于其他任何人,也许它是编译器特定的东西,但不确定。
    • 在我发布的一个链接中,有一个人专门提出了一个关于这个问题的问题,在收到使用建议后,“if (argv[1] == "-t")”他说它有效伟大的。我发布的另一个链接是解析命令行参数的教程。我完全复制了代码,但它对我不起作用。嗯...
    • 看起来确实很奇怪,抱歉我帮不上忙。
    • 无论如何谢谢:)。也许其他人可以帮助我。
    【解决方案2】:

    你的字符串比较不正确。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2018-07-23
      • 2016-08-07
      • 2017-10-21
      • 2013-03-07
      • 1970-01-01
      相关资源
      最近更新 更多