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程序自身的路径(默认存在)
1file.txt用户自定义参数
2123用户自定义参数
3-v用户自定义参数(常用作开关)

这时:

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

二、用法举例

打印出所有命令行参数:

#include <iostream>

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值