110.【C语言】编写命令行程序(1)

目录

1.前置知识

"命令"的含义

 运行C语言程序

2.介绍

main函数的参数

实验1

执行结果

实验2

执行结果

修改代码

实验3

分析

方法:遍历数组argv[]中的所有参数

 执行结果

修改代码

执行结果


1.前置知识

"命令"的含义

WIN+R输入cmd,在cmd窗口下输入calc后回车

会发现打开了计算器程序

这里的"calc"被称为命令,因此命令在本质上可以理解为程序

 运行C语言程序

来到可执行程序的目录下,单击展示路径的地方(即地址栏)

输入cmd

会发现cmd会切换到当前目录下执行

输入C程序的名称就可执行程序

2.介绍

和以往写的程序有所不同,main函数里没有参数

int main()
{//......return 0;
}

但编写命令行程序时,main函数是有参数的!

main函数的参数

格式

int main(int argc, char* argv[ ])
{//......return 0;
}

两个参数:int类型的argc,char*类型的argv

argc全称 argument count;argv的全称argument vector

argc存储命令行参数的个数

argv指向存储参数的数组的首元素

实验1

制以下代码到VS上编译成可执行程序,用cmd去运行这个程序(注意:不要用VS的调试器,Ctrl+F7生成解决方案)

打印Hello World!

#include <stdio.h>
int main(int argc, char* argv[ ])
{printf("Hello World!");return 0;
}

执行结果

实验2

#include <stdio.h>
int main(int argc, char* argv[ ])
{printf("%s", argv[0]);return 0;
}
执行结果

会发现argv[0]存储的实际上是程序的名称

可以这么理解:cmd为main函数传递了1个参数Command.exe,使得参数个数1被写入argc,Command.exe被写入argv指向的数组

修改代码

在printf后再加一行printf("%s", argv[1]);编译后,用cmd执行程序,查看执行结果

会发现Command.exe后跟了一个(null),原因是越界访问

只传了一个参数,但要打印两个参数,导致argv[1]没有值,因此打印(null),即空

实验3

设计一个程序,在cmd中输入Commend.exe --version来显示程序的版本,字符串"The Commend.exe's version is 1.0."

分析

cmd向Commend.exe传递了两个参数Commend.exe和--version(相邻的参数用空格分开),需要自行解析--version

方法:遍历数组argv[]中的所有参数

比较字符串是否相等用strcmp函数,切忌使用argv[i]=="......"!!!!!!

#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[ ])
{for (size_t i = 0; i < argc; i++){if (strcmp(argv[i], "--version")==0){printf("The Commend.exe's version is 1.0.");}}return 0;
}
 执行结果

正确输入参数后会打印结果,否则不显示参数

修改代码

输入"Commend.exe --version"或"Commend.exe -v"都能打印版本

则if语句修改为

if (strcmp(argv[i], "--version")==0 || strcmp(argv[i], "-v") == 0)
执行结果

问题:既然只检查"--version"和"-v"参数(都是第二个参数),直接写成下面代码不就行了吗?能达到同样的效果,为什么需要遍历参数数组?

#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[ ])
{if (strcmp(argv[1], "--version")==0 || strcmp(argv[1], "-v") == 0){printf("The Commend.exe's version is 1.0.");}return 0;
}

原因见下篇文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android NumberPicker隐藏分割线或修改颜色

在 Android 中&#xff0c;可以通过以下几种方法隐藏 NumberPicker 的分割线&#xff1a; 使用 XML 属性设置 在布局文件中的 NumberPicker 标签内添加 android:selectionDividerHeight"0dp" 属性&#xff0c;将分割线的高度设置为 0&#xff0c;从而达到隐藏分割线…

Leecode刷题C语言之半有序排列

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int semiOrderedPermutation(int* nums, int numsSize) {int first 0, last 0;for (int i 0; i < numsSize; i) {if (nums[i] 1) {first i;}if (nums[i] numsSize) {last i;}}return firs…

RPC设计--从reactor设计 (IOthread)

主从reactor架构 一般的一个网络IO库都是主从reactor模式&#xff0c;即主线程中有一个MainReactor&#xff0c;其负责监听ListenFd&#xff0c;当接受到新的用户连接时&#xff0c;返回的clientfd并不会加入的MainReacotr&#xff0c;而是在子线程&#xff08;这里称为IO线程&…

Scala中求斐波那契数列的第n项

求斐波那契数列的第n项 问题&#xff1a;求 斐波那契数列的第n项 记&#xff1a; 0 1 1 2 3 5 8 13 21 34 55 ... 从第3项开始 f(n) f(n-1) f(n-2) 1.基本情况&#xff08;直接能求的&#xff09;&#xff1a;f(0) 0,f(1) 1 2.递归情况&#xff08;大事化小&#xff0c;自己…

【Anaconda/Miniconda conda 常用命令】

【Anaconda/Miniconda conda 常用命令】 1. 虚拟环境管理查看虚拟环境创建虚拟环境激活/退出虚拟环境删除虚拟环境 2. 包管理安装包更新包卸载包查看已安装的包 3. 环境导出与迁移导出环境导入环境 4. 清理与优化清理缓存 5. 常见信息查询查询环境/包 6. 其他实用命令切换频道更…

【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式

并发模式 下例重新对 channel 的用法进行回顾&#xff1a; package mainimport ("fmt""math/rand""time" )func msgGen(name string) chan string {c : make(chan string)go func(name string) { // 在这个 goroutine 当中向外发送数据i : 0fo…

重生之我在异世界学编程之C语言:深入结构体篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

Scala递归中求汉罗塔游戏的步骤

记&#xff1a;f(n,"A","B","C")表示n个盘子从A柱子上移动到C柱子上&#xff0c;借用B柱子的过程 f(要移动的盘子的个数&#xff0c;起点&#xff0c;辅助柱子&#xff0c;终点) 1.基本情况(直接能求的)&#xff1a;f(1,"A","B&…

[代码随想录Day34打卡] 62.不同路径 63. 不同路径 II 343. 整数拆分 (可跳过)96.不同的二叉搜索树 (可跳过)

62.不同路径 和上楼梯相同&#xff0c;机器人只可以向右向下移动。所以在位置[i,j]有两种情况&#xff0c;一种从[i-1, j]向右移动到达当前位置&#xff0c;或者从[i, j-1]向下移动到当前位置。所以到达当前位置的方法数量就等于到达[i, j-1]和到达[i-1, j]的方法数量的和。 简…

使用Jackson库的ObjectMapper类将Java的Set集合转换为JSON数组

本教程展示如何使用Jackson库的ObjectMapper类将Java的Set集合转换为JSON数组。 由于Set是一个不允许重复元素且不保证元素顺序的集合&#xff0c;所以当它被序列化为JSON数组时&#xff0c;其元素的顺序可能与插入时不同。下面是具体步骤和代码示例。 添加依赖项 首先&…

输入url到显示主页的详细过程

从浏览器地址输入url到显示主页的过程&#xff1f; 主要分为&#xff1a;DNS解析&#xff0c;TCP连接&#xff0c;发送HTTP请求&#xff0c;服务器处理请求&#xff0c;浏览器接收HTTP响应&#xff0c;断开连接 DNS解析&#xff1a; 浏览器发起一个DNS请求到DNS服务器&#…

使用C#通过ColorMatrix对象为图像重新着色

此示例产生了一些令人印象深刻的结果&#xff0c;但实际上非常简单。 它使用其他几个示例演示的 ImageAttribute 技术来快速操作图像的颜色。 下面的AdjustColor方法启动图像着色的过程。 // Adjust the images colors. private Image AdjustColor(Image image) {// Make the …

手机租赁系统开发全流程解析与实用指南

内容概要 在如今快速发展的科技时代&#xff0c;手机租赁系统已经成为一种新兴的商业模式&#xff0c;非常符合当下市场需求。那么&#xff0c;在开发这样一个系统的时候&#xff0c;首先要从需求分析和市场调研开始。在这一阶段&#xff0c;你需要了解用户需要什么&#xff0…

unity打包web,如何减小文件体积,特别是 Build.wasm.gz

unity打包WebGL&#xff0c;使用的是wasw&#xff0c;最终生成的Build.wasm.gz体积很大&#xff0c;有6.5M&#xff0c;有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码&#xff1a; 此步可将大小从6.5减小到 6.2&#xff08;此项默认开启&#xff0c;只是改了裁剪等级…

字符集编码

由于计算机只能存储和处理二进制的“0”和“1”&#xff0c;无法处理其他的字母、数字和符号&#xff0c;所以就需要有某种东西来达到类似桥梁的作用——例如图1-7中的ASCII——通过它&#xff0c;人们就可以看懂用计算机表示字母、数字或其他符号。 人们能够想到的最直接的方…

OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)

注&#xff1a;目前社区版对 4.0 升级 bp1至 bp2也未有完善的文档&#xff0c;本次升级中也是遇到不少坑&#xff0c;写本文也希望对OB感兴趣的可以尝试少些遇坑。 也希望对升级有更好方式建议方式的朋友一起切磋交流&#xff0c;以便再进一步完善升级方案。 第一次做OB的升级&…

基于SSM框架的社区医院管理系统(计算机毕业设计)+万字说明文档

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

视频安防监控平台:Liveweb视频监控管理云平台方案

LiveWeb是深圳市好游科技有限公司开发的一套综合视频汇聚管理平台&#xff0c;可提供多协议&#xff08;RTSP/RTMP/GB28181/海康Ehome/大华&#xff0c;海康SDK等&#xff09;的视频设备接入&#xff0c;支持GB/T28181上下级联&#xff0c;RTSP\RTMP转GB/T28181&#xff0c;云台…

Linux进程概念-详细版(二)

目录 前言&#xff1a; 进程优先级 基本概念 查看系统进程 PRI与NI 查看进程优先级信息 通过top命令更改进程的nice值 通过renice命令更改进程的nice值 四个重要概念 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL ​编辑 …

能不能用一句话或者简洁地凝练深度学习的本质和精髓?

深度学习就是学习输入与输出之间的映射关系。 深度学习模型本质上只是个参数量很大的函数&#xff0c;其中函数的参数可以通过训练样本进行调整。 根据训练样本的不同&#xff0c;进一步可以分为以下几类&#xff1a; 一、给定输入以及对应的输出&#xff0c;其中输出是唯一的…