命令行参数

发布时间:2026/10/23 9:14:33

命令行参数 目录1. 命令行参数1.1 什么是命令行参数1.2 argc 与 argv1.2.1 argc1.2.2 argv1.3 使用命令行参数的意义在学习 C 语言时我们最熟悉的main函数可能是无参的int main()。但其实main函数是可以带参数的它就是我们在终端执行程序时经常用到的命令行参数。1. 命令行参数1.1 什么是命令行参数当我们打开终端Terminal或命令行CMD输入一行命令时其实就是在向操作系统传递参数。例如./code a b c d在这行命令中./code是我们编译生成的可执行程序。a b c d就是我们传递给程序的命令行参数。1.2argc与argv测试代码#include stdio.h int main(int argc, char *argv[]) { printf(argc: %d\n, argc); int i 0; for(; i argc; i) { printf(argv[%d]-%s\n, i, argv[i]); } return 0; }编译并运行./code a b c d输出结果如下1.2.1argcargc全称是argument count代表参数的个数整型。注意程序本身的名称也算一个参数。所以执行./code a b c d时有./code加上a,b,c,d共 5 个参数因此argc为 5。argc的值至少是 1argc 1。argv[0]必定存在它指向的就是程序运行时的名称包含路径。1.2.2argvargv全称是argument vector参数向量它是一个字符指针数组char *argv[]。每一个元素指向一个字符串。所有的参数都是以空格分隔的字符串。即使你输入的是单个字符a在 C 语言中它也被当作字符串a来处理。argv数组的长度是argc最后一个有效参数是argv[argc-1]。并且在标准实现中argv[argc]的值必定是NULL这常被用来作为遍历结束的标志。当我们在终端敲下命令并回车时Bash和操作系统在背后默默完成了字符串的拆分和数组的构建。系统会把这些字符串存放在内存的栈区或环境区。char *argv[]就像是一个指针数组里面的每一个“格子”都存放着对应字符串在内存中的首地址。同时系统会将参数个数传给argc。示意图中绿色的格子清晰的展示了argv数组的结构argv[0]指向./codeargv[1]指向a……最后一个格子指向NULL。1.3 使用命令行参数的意义既然可以在程序里用scanf或写死数据为什么非要用命令行参数呢命令行参数的本质应用是为了实现“一个命令根据不同的选项实现不同的子功能”。这是 Linux/Unix 系统中所有命令如ls,cp,grep能够灵活工作的基石。你可以通过传入不同的参数让同一个程序执行完全不同的逻辑。示例#include stdio.h #include string.h int main(int argc, char *argv[]) { if(argc ! 2) { printf(该命令使用错误你应该这样用: %s -a|-b|-c|-d\n, argv[0]); return 1; } if(strcmp(argv[1], -a) 0) { printf(我现在执行的是该命令的第一种功能\n); } else if(strcmp(argv[1], -b) 0) { printf(我现在执行的是该命令的第二种功能\n); } else if(strcmp(argv[1], -c) 0) { printf(我现在执行的是该命令的第3种功能\n); } else { printf(我现在执行的是该命令的默认功能\n); } return 0; }只需运行./code -a或./code -b就能让程序走不同的分支。
延伸阅读

更多相关文章

2026/10/23 9:14:32

数据库基础与实战:从SQL到NoSQL的全面解析

1. 数据库基础概念解析数据库(Database)本质上是一个有组织的数据集合,它允许我们以结构化的方式存储、管理和检索信息。想象一下图书馆的图书管理系统——如果没有分类编号和检索目录,我们要从百万册藏书中找到特定书籍几乎不可能…

2026/10/23 9:09:32

red hat day2

文本内容处理命令:echo输出重定向符 >>>追加输出重定符| 命令管道符——前一个命令的输出作为后面命令的标准输入grep——文本过滤命令grep -选项 ‘关键字’ 文件名-v ---取反匹配符:^ 行首定符$^$ 空白符[] 集合符。仅匹配集合内任意单个字符…

2026/10/23 10:09:56

JSP隐式对象与四大作用域详解:从原理到实战避坑

1. 从一次“数据莫名消失”的调试说起做 JSP 开发的人,几乎都经历过这样的场景:明明在页面里把数据塞进去了,翻到下一个页面却怎么也取不出来;或者同一个变量,在 A 页面是值,在 B 页面变成了 null&#xff…

2026/10/23 10:09:56

Django手机商城实战:SPU+SKU架构与订单状态机

简介:这是一份基于Django框架开发的Python全栈实战项目——手机商城,面向具备基础Python和Web开发能力的学习者,适用于全栈入门实践、课程设计或毕业设计参考。项目采用前后端分离架构:后端使用Django构建管理后台与API服务&#…

2026/10/23 10:09:56

货道绑定-DeviceProduct与slotNo库存模型

07-货道绑定-DeviceProduct与slotNo库存模型系列:URM Ultra 商品/设备/订单/支付/视觉 业务实战篇 主角:设备域的「货道绑定」——把一台售货柜的每个格子,跟具体商品、库存、售价绑在一起。 适合人群:没写过自动售货柜后端、但会…

2026/10/23 10:09:56

设备管理接口-从分页到心跳

06-设备管理接口-从分页到心跳系列:URM Ultra 商品/设备/订单/支付/视觉 业务实战 主角:urm-server 后端 device 域 AdminDeviceController DeviceService上篇(第 05 篇)我们把 Device 实体拆透:它是双门智能柜的电…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑