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

Jinku Hu 2023年1月30日 2021年4月29日
  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::cout;
using std::cerr;
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::cout;
using std::cerr;
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::cout;
using std::cerr;
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);
}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn