命令行参数
概念说明
命令行参数允许程序在启动时接收外部输入,而不必每次运行后再交互式输入。 这类方式非常适合脚本工具、批处理程序和命令行小工具。
在 C 里,main 函数常见的写法有两种:int main(int argc, char *argv[]) 和 int main(int argc, char **argv)。
这两种写法在这里可以理解为等价,核心区别不在语义,而在写法风格。
其中 argc 表示参数个数,argv 表示参数字符串数组。
程序名本身通常也会算作一个参数,所以即使用户没有额外传参,argc 一般也至少是 1。
语法/规则
main常见写法是int main(int argc, char *argv[])或int main(int argc, char **argv)。argc至少为 1,因为程序名本身通常就占argv[0]。argv[0]一般是程序名或程序路径,真正的用户参数从argv[1]开始读取。- 使用参数前应先检查
argc,避免访问不存在的元素。 - 命令行参数默认都是字符串;如果要转成数字,
strtol、strtod一般比atoi、atof更适合做错误检查。 - 多个参数之间默认用空格分隔;如果单个参数本身包含空格,传参时通常要用引号包起来。
- 实际项目中,命令行参数常用于传递配置文件路径、输入输出文件名、调试开关和模式选项。
示例
| |
输出结果:
| |
argv[0] 的实际内容和运行环境有关。
有的平台会显示 demo,有的平台会显示 demo.exe,也有可能直接显示完整路径。
常见错误
- 不检查
argc就直接使用argv[1]、argv[2],导致越界访问。 - 直接用
atoi处理用户输入,却没有检测转换失败的情况。 - 忽略带空格参数需要加引号这一点,导致实参数量和预期不一致。
- 把
argv里的字符串当成整数直接计算,却没有先完成合法转换。 - 在函数参数里对数组使用
sizeof试图计算实参数量,结果得到的是指针大小而不是真实元素个数。