【问题标题】:Commandline arguments not working - Skips over them completely命令行参数不起作用 - 完全跳过它们
【发布时间】:2010-10-01 08:06:53
【问题描述】:

好的,我正在尝试让参数与小型测试应用程序一起正常工作。我的代码如下。我在 C++ 方面没有太多经验,所以我不确定为什么当我使用 -print(或 --print)启动测试时,它会自动声明“不是有效选项”,然后结束。

#include <iostream>

int main(int argc, char* argv[])
{
    int option;
    option = 1;
    char* argument;
    argument = argv[option];
    while (option < argc)
    {
        if (argument == "-print")
        {
            std::cout << "Printing Extra Text";
        }
        else
        {
            std::cout << "Not a valid option" << std::endl;
        }
        option++;
    }
    std::cout << "Printing normal text" << std::endl;
    return 0;
}

我这样做对吗?提前致谢。

【问题讨论】:

    标签: c++ command-line arguments


    【解决方案1】:

    您将字符串“-print”的内存地址与argument 的内存地址进行比较。这行不通!使用strcmp() 比较字符串值。而不是:

    if (argument == "-print")
    

    if (strcmp(argument, "-print") == 0)
    

    【讨论】:

      【解决方案2】:

      下面一行有问题:

      if (argument == "-print")
      

      这里你比较的是指针,而不是字符串值。替换为:

      if (strcmp(argument, "-print") == 0)
      

      在字符串处理方面,C/C++ 的行为与 Java 或 C# 不同。字符串不是原生类型或对象,只是美化了指向字符数组的指针。

      或者,如果您的选项列表变得更加复杂,请考虑使用专用的选项解析库,例如 BoostProgram_options。它将处理所有方面,包括验证和用户消息。

      【讨论】:

        【解决方案3】:

        我用 C++ 编程已经有一段时间了,但不应该只是使用

        std::string argument;
        

        然后与 == 的比较会起作用吗?

        【讨论】:

          【解决方案4】:
          if (argument == "-print")
          

          你不能像这样比较字符串!

          使用 strcmp() 比较字符串。

          【讨论】:

            【解决方案5】:

            您的问题表明您还想测试 --print(两个破折号),但您的代码没有检查。

            此外,您在循环外分配参数,您会希望在循环内执行此操作,否则每次循环时您只会测试参数 #1。

            【讨论】:

              【解决方案6】:

              当您阅读该论点时,还有另一个问题。 (进行所有必要的更改)

              int main(int argc, char* argv[])
              {
                  int option;
                  option = 1;
                  char* argument;
                  while (option < argc)
                  {
                      argument = argv[option];
                      if (strcmp(argument, "-print") == 0)
                      {
                          std::cout << "Printing Extra Text";
                      }
                      else
                      {
                          std::cout << "Not a valid option" << std::endl;
                      }
                      option++;
                  }
                  std::cout << "Printing normal text" << std::endl;
                  return 0;
              }
              

              【讨论】:

                猜你喜欢
                • 2021-09-27
                • 2012-11-28
                • 2017-06-19
                • 2013-06-05
                • 1970-01-01
                • 2011-04-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多