C++中main函数通过argc和argv获取命令行参数:argc为非负整数,表示总参数个数(含程序名),至少为1;argv是char*数组,argv[0]为程序名,argv[1]至argv[argc-1]为用户参数,argv[argc]为空指针。
在C++中,命令行参数通过main函数的两个形参获取:整型argc(argument count)和字符指针数组argv(argument vector)。它们不是可选的扩展功能,而是标准C++程序启动时由操作系统自动传递的必要接口。
argc 是一个非负整数,代表命令行中输入的**总参数个数**。注意:第一个参数(argv[0])固定是程序的路径或名称,因此即使不带任何额外参数,argc 至少为 1。
./myapp → argc == 1
./myapp -v --input data.txt → argc == 4(argv[0]到argv[3])argc > 1 就安全访问 argv[1];必须先判断大小argv 类型为 char* argv[](等价于 char** argv),每个元素是一个以结尾的C字符串。这些字符串由系统在程序启动时分配并初始化,生命周期覆盖整个argv 类型为 char* argv[](等价于 char** argv),每个元素是一个以\0结尾的C字符串。这些字符串由系统在程序启动时分配并初始化,生命周期覆盖整个main函数执行期。main函数执行期。
argv[0] 是程序被调用时使用的路径/名称(可能含目录,也可能只是basename)argv[1] 到 argv[argc-1] 是用户输入的其余参数,顺序严格对应命令行书写顺序argv[argc] 总是空指针(nullptr),可用作遍历终止条件对多数工具类程序,直接遍历 argv 并用 std::string 或 strcmp 判断即可。不需要第三方库也能完成常见任务。
for (int i = 1; i 跳过程序名,处理用户参数
std::string arg(argv[i]) 转为现代C++字符串,便于比较和操作-h 或 --help 时,注意前缀匹配逻辑(例如 arg == "-h" || arg =
= "--help")argv[i] 是 "-o",则下一个参数 argv[i+1](需检查 i+1 )通常是其值
看似简单,但几个细节容易引发未定义行为或逻辑错误:
argv 中的字符串内容不可修改——它们通常位于只读内存段;如需修改,应复制到堆或栈上"文件 name.txt"),shell 会将其整体作为单个 argv 元素传递argv[argc] = nullptr —— 系统已保证这一点,手动赋值反而可能越界