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

Creating a program in C++ that takes arguements from the command line

本文关键字:命令行 获取 参数 程序 一个 C++ 创建      更新时间:2023-10-16

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

您通常将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

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

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

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

根据您对使用指针的熟练程度和倾向,您可能更喜欢将命令行捕获为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]);
}