C/C++ 主函数中的 argc 和 argv

在学习 C 或 C++ 编程语言时,我们经常会看到如下形式的 main 函数:

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

初学者可能会疑惑:这两个参数到底是干嘛用的?如果不需要输入参数,是不是可以不用写它们?

今天这篇文章就来系统地解释一下 argc 和 argv 是什么、它们在命令行程序中扮演了什么角色。

一、argc 和 argv 是什么?

在 C/C++ 中,程序的入口是 main() 函数。它的两个参数:

  • argc:Argument Count,表示命令行参数的个数;
  • argv:Argument Vector,是一个字符串数组,用来存储每个参数的内容。

它们让你的程序能接收来自命令行的外部输入参数

示例:命令行运行一个程序

./my_program file.txt 123 -v

这行命令实际上给程序传入了 4 个参数:

索引 参数内容 说明
0 ./my_program 程序自身的路径(默认存在)
1 file.txt 用户自定义参数
2 123 用户自定义参数
3 -v 用户自定义参数(常用作开关)

这时:

  • argc = 4
  • argv[0] = “./my_program”
  • argv[1] = “file.txt”
  • argv[2] = “123”
  • argv[3] = “-v”

二、用法举例

打印出所有命令行参数:

#include 

int main(int argc, char* argv[]) {
    std::cout << "参数个数: " << argc << std::endl;
    for (int i = 0; i < argc; ++i) {
        std::cout << "参数 " << i << ": " << argv[i] << std::endl;
    }
    return 0;
}

运行:

./demo hello world

输出:

参数个数: 3
参数 0: ./demo
参数 1: hello
参数 2: world

三、注意事项

  • argv[0] 是程序路径名,即使没有传入任何自定义参数,也至少有一个参数;
  • argv[i] 是 C 风格字符串(char),可以用 std::string 来转换使用;
  • 程序不要越界访问 argv[argc] 以外的内容,否则会导致未定义行为。

四、是否可以省略 argc 和 argv

当然可以,如果你的程序根本不依赖命令行参数,可以这么写:

int main() {
    // 不用 argc 和 argv
    return 0;
}

但一旦你想要外部用户传参给你的程序,就建议使用 main(int argc, char* argv[]) 的形式。

五、总结

名称 含义 示例值
argc 参数个数 4
argv 参数数组(C 字符串数组) argv[1] = "input.txt"

你可能感兴趣的:(c语言,c++,开发语言)