【问题标题】:How to get 1st parameter in main() in C++? [duplicate]如何在 C++ 中的 main() 中获取第一个参数? [复制]
【发布时间】:2010-07-06 14:42:26
【问题描述】:

可能重复:
Pass arguments into C program from command line.

mypro parameter

如上运行时,如何获取mypro的main()中的参数:

#include <iostream>

int main()
{
   char* str = "default_parameter";
   if(parameter_exists())str = parameter;
   ...
}

上面的伪代码如何实现?

【问题讨论】:

  • @KennyTM - 该问题的公认答案并未说明您需要以不同方式声明 main。
  • 其他问题是关于 C,而不是 C++。 C++ 的答案是完全一样的,这不是微不足道的(也是一种耻辱)。真的应该是int main(std::vector&lt;std::string&gt; args) { }

标签: c++ syntax


【解决方案1】:

只需将(int argc, char *argv[]) 添加到您的主函数中。 argc 保存参数的数量,而 argv 保存参数本身。

int main(int argc, char *argv[])
{
    std::string str = "default";
    if (argc > 1) { str = argv[1]; }
}

请注意,该命令也包含在参数中(例如可执行文件)。因此第一个参数实际上是 argv[1]。

【讨论】:

  • 请指定您应该添加 (int argc, char **argv) 作为主要参数。
  • string char * 一样吗?
  • @user198729: string 是一个 C++ 字符串,如果您应该编写 C++ 代码,您可能应该使用它。 char * 是一个 C 字符串,除非你有充分的理由,否则你可能不应该在 C++ 中使用它。
  • 请注意,在 Windows 中,如果您像这样调用 CreateProcessCreateProcess("a.exe", "/b", ...),那么 argv[0] 将是 /b,而不是 a.exe
【解决方案2】:

当需要命令行参数时,main() 接受两个参数:argc 用于参数数量,argv 用于实际参数值。请注意,argv[0] 将始终是程序的名称。

考虑如下调用的程序:./prog hello world:

argc    = 3
argv[0] = ./prog
argv[1] = hello
argv[2] = world

下面是一个镜像伪代码的小程序:

#include <iostream>
#include <string>

int main(int argc, char **argv) {
    std::string arg = "default";
    if (argc >= 2) {
        default = argv[1]
    }
    return 0;
}

【讨论】:

    【解决方案3】:

    您的函数应该使用这两个允许的 C++ 主函数签名中的第二个:

    int main(void)
    
    int main(int argc, char *argv[])
    

    其中,argc 是参数计数,argv 是参数向量。

    更多详情,请查看Wikipedia article

    【讨论】:

      【解决方案4】:

      你需要一个接受参数的主函数,如下所示:

      int main(int argc, char *argv[])
      {
      
      }
      

      然后您将使用argc 检查传入的参数数量。通常总是有一个可执行文件的名称,但我认为这取决于操作系统,因此可能会有所不同。

      【讨论】:

        【解决方案5】:

        您需要将主要更改为:

        int main(int argc, char** argv){
        

        argc 是参数的数量,argv 是一个包含所有参数的数组(索引 0 是程序的名称)。您的第一个参数将位于 argv 的索引 1。

        【讨论】:

          【解决方案6】:
          #include <iostream>
          
          
          using namespace std;
          
          int main(int argc, char* argv[]) {
             for(int i = 1; i < argc; i++)
                cout << atoi(argv[i]) << endl;
             return 0;
          } 
          

          这里 argc 给出了传递的参数的数量 argv[i] 给出第 i 个命令行参数。

          其中 argv[0]='程序本身的名称'

          【讨论】:

          • 请注意,在 Windows 中,如果您像这样调用 CreateProcessCreateProcess("a.exe", "/b", ...),那么 argv[0] 将是 /b,而不是 a.exe
          【解决方案7】:

          main 有两个参数,int argc 和 char** argv,您可以使用它们来访问命令行参数。

          argc 是参数的数量,包括可执行文件的名称,argv 指向参数列表本身(因此 argv[0] 在您的示例中是“mypro”)。

          只需声明 main like int main (int argc, char** argv){..}

          【讨论】:

            【解决方案8】:

            你需要使用 main 的这个声明:

            int main(int argc, _TCHAR* argv[])
            {
                if (argc > 1)
                {
                    str = argv[1];
                }
            }
            

            argv[0]是可执行文件的名称,所以参数以argv[1]开头

            【讨论】:

            • 请注意,在 Windows 中,如果您像这样调用 CreateProcessCreateProcess("a.exe", "/b", ...),那么 argv[0] 将是 /b,而不是 a.exe
            【解决方案9】:

            在 Windows 上,请改用以下签名来获取 Unicode 参数:

            int wmain(int argc, wchar_t** argv)
            

            【讨论】:

              猜你喜欢
              • 2022-12-22
              • 1970-01-01
              • 2014-04-16
              • 1970-01-01
              • 2011-05-09
              • 2014-07-03
              • 2018-05-02
              • 2019-11-26
              • 1970-01-01
              相关资源
              最近更新 更多