当前位置: 首页 > news >正文

Linux---命令行参数

一、命令行参数

在介绍命令行参数前,我想问大家一个问题,在以前写C/C++时,main 函数可不可以带参数?

答案是可以带的,int main(int argc, char* argv[]){},但平时写代码时也证明了,main 函数的参数可带可不带。我们要讨论的内容是带 int argc, char* argv[] 有什么意义?

我们不妨写一个C语言代码,将argv中的内容打印出来看看。

使用gcc编译,形成可执行程序progress

在运行可执行程序progress后,我们发现main函数的参数 int argc, char* argv[] 是用来存储命令行字符串和其下标的,在存储中,以空格作为分隔符将命令行字符串拆散成一个个字串,来存入argv这个字符串数组,数组中下标为0的(第一个)元素是程序的路径+名称,后面的元素是和该进程匹配的选项。

那它为什么要这么做?

我们借用下面这段代码来进行理解。

#include <stdio.h>
#include <unistd.h>int main(int argc, char* argv[])
{if (argc != 2){printf("Usage: $s -[a,b,c,d]\n", argv[0]);return 1;}if (strcmp(argv[1], "-a") == 0){printf("this is function1\n");}else if (strcmp(argv[1], "-b") == 0){printf("this is function2\n");}else if (strcmp(argv[1], "-c") == 0){printf("this is function3\n");}else if (strcmp(argv[1], "-d") == 0){printf("this is function4\n");}else{printf("no this function!!\n");}
}

运行同一个程序,加上不同的选项,就出现了不同的结果,这就说明:在同一个程序中,我们可以通过不同的选项,来执行同一个程序内的不同的功能,那这又有什么用呢?

不知道大家还记不记得在之前的基本指令学习篇:

https://blog.csdn.net/wangdongdong23/article/details/136420870?spm=1001.2014.3001.5502

中,我们就可以通过一个相同的指令加上不同的选项来实现不同的功能。

命令行参数的本质是交给我们程序的不同选项,用来定制不同的程序功能。

相关文章:

  • 7、jenkins项目构建细节-常用的构建触发器
  • C++基础之虚函数(十七)
  • uniapp 未配置appkey或配置错误的解决
  • vue 文件预览(docx、.xlsx、pdf)
  • 飞天使-k8s知识点28-kubernetes散装知识点5-helm安装ingress
  • 黑马鸿蒙笔记2
  • Python从零到一构建GPT模型
  • 统信 UOS V20 一键安装 Oracle 12CR2(220118)单机版
  • Android RecyclerView 滑动后选中的条目居中显示
  • 专升本-大数据
  • 创新研报 | 2024+人工智能安全报告
  • 2015年认证杯SPSSPRO杯数学建模B题(第一阶段)替换式密码全过程文档及程序
  • [深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现二
  • 农村分散式生活污水分质处理及循环利用技术指南
  • 01-机器学习概述
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • .pyc 想到的一些问题
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Node项目之评分系统(二)- 数据库设计
  • SpringBoot几种定时任务的实现方式
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • XML已死 ?
  • 翻译:Hystrix - How To Use
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java数据解析之JSON
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​ubuntu下安装kvm虚拟机
  • # Maven错误Error executing Maven
  • #HarmonyOS:基础语法
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)SpringBoot3---尚硅谷总结
  • (转)nsfocus-绿盟科技笔试题目
  • (转)重识new
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net core控制台应用程序初识
  • .net wcf memory gates checking failed
  • .NET 的程序集加载上下文
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET框架设计—常被忽视的C#设计技巧
  • .net专家(张羿专栏)
  • ::前边啥也没有
  • @Not - Empty-Null-Blank
  • [Angular] 笔记 21:@ViewChild
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [CTO札记]如何测试用户接受度?
  • [delphi]保证程序只运行一个实例
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [FFmpeg学习]从视频中获取图片
  • [hibernate]基本值类型映射之日期类型
  • [hihocoder1395] 最大权闭合子图