在 C++ 中检索命令行参数

Jinku Hu 2023年10月12日
  1. 使用 int main(int argc, char *argv[]) 表示法来检索 C++ 中的命令行参数
  2. 在 C++ 中使用 int main(int argc, char **argv) 表示法检索命令行参数
  3. 在 C++ 中使用 while 循环来打印出命令行参数
在 C++ 中检索命令行参数

本文将介绍几种如何在 C++ 中检索命令行参数的方法。

使用 int main(int argc, char *argv[]) 表示法来检索 C++ 中的命令行参数

命令行参数是可以在执行开始时传递给程序的字符串值。通常,这些参数被具有纯 CLI 接口的程序广泛使用,例如 Unix 命令行实用程序。请注意,C++ 程序应具有特殊的 main 函数定义以访问命令行参数。即,main 函数应该包括以下参数 - (int argc, char *argv[])argc 参数表示传递给程序的参数总数,包括程序名称本身。另一方面,argv 存储表示参数值的字符串数组,可以使用数组符号 argv[0] 对其进行访问。注意,char 指针的数组保证以 0 结束。

下面的示例演示 for 循环的基本用法,用于将每个参数值打印到控制台。但是请注意,前面的 if 语句可确保程序指定了参数,然后继续执行。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

在 C++ 中使用 int main(int argc, char **argv) 表示法检索命令行参数

还有另一个有效的 main 函数原型,其行为与上一个函数原型完全相同,因此我们将其包含在内,以确保在出现以下表示法时不会造成混淆-int main(int argc, char **argv)。注意,访问元素的方式相同,可以使用 for 循环遍历它们。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char **argv) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

在 C++ 中使用 while 循环来打印出命令行参数

访问参数值的另一种方法是解除对 argv 指针的引用,直到它等于零为止。请注意,保证 argv 数组以零值结尾,我们可以利用它来实现 while 循环以遍历数组并一一打印出参数值。注意,下面的 if 语句中的 printf 调用充当错误报告程序,表明没有将足够的参数传递给程序。有趣的是,程序名称是使用 argv[0] 表示法和%s 指示符进行检索的,这使得它比每次更改名称都要进行硬编码都更加灵活。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  while (*argv) {
    cout << *argv << endl;
    argv += 1;
  }

  exit(EXIT_SUCCESS);
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook