在C ++中创建一个从命令行获取参数的程序

时间:2011-05-05 22:10:49

标签: c++ command-line

我正在尝试学习如何在C ++中创建一个程序,当你运行它时,你可以告诉它运行并在一行中指定选项。例如,您可以在CMD中执行ipconfig /all,并使用选项/all运行ipconfig.exe。另一个示例是shutdown -f,它告诉计算机使用选项-f关闭。例如,我想创建一个程序,从URL下载一些东西并调用它,例如下载程序。从命令行可以输入downloader http://filehere.com /h,它将使用/ h选项下载文件,我将在程序中定义其属性。我不想要如何制作下载器的代码或指南我只是想学习如何指定/ h这样的选项。有没有你知道的指南,可以发布或任何示例代码?我试过搜索指南,但我想我只是不知道这个操作实际上是什么叫。谢谢。

3 个答案:

答案 0 :(得分:2)

您通常会定义main函数以采用两个参数:int argcchar *argv[],例如:

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

第一个参数是程序接收的参数数量,argv是指向它们的指针。注意,这不是强制性的,您可以将它们命名为任何您想要的,但这就是惯例。只需确保您的类型匹配。

您可以使用选项解析库,但这些库通常是特定于操作系统的。检查您是否收到/ h的一种简单方法是:

int got_h = 0;
for (int i=0; i<argc; ++i)
   if (strcmp(argv[i], "/h") == 0)
      got_h = 1;
...
if (got_h)
   ...

argv[argc]始终为NULL,以便更轻松地进行迭代。

此处提供更多信息:http://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3/CommandLineArguments.html

答案 1 :(得分:2)

main函数有两个参数,传统上称为argcargv

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

argc包含在命令行上传递的参数数量,argv数组包含此类参数(argv[0]是用于调用程序的名称); argv数组的最后一个元素(即argv[argc])包含NULL指针。

答案 2 :(得分:2)

根据您的熟练程度和使用指针的倾向,您可能更喜欢将命令行捕获为vector<string>

// UNTESTED CODE
int main(int argc, char **argv) {
  std::vector<std::string> args(argv+1, argv+argc);

  if(args.empty()) {
    std::cout << "Usage: downloader URL [options]\n";
    return 1;
  }
  if(std::find(args.begin(), args.end(), "/h") != args.end()) {
    option_h = true;
  }
  Download(args[0]);
}