微信公众号:"C语言初学者之家"

之前的文章中提到,C语言main函数可以写作int main(void),也可以写成int main(int argc, char *argv[]) 。

到底哪种main函数写法对?main()、int main(int argc, const char * argv [])...

文章的最后,我们说:一般情况下,你编程用int main(void)就可以了。那你可能会问:一般情况指哪些情况?什么情况下要用int main(int argc, char *argv[]) ?

这篇文章给你解答。

1.什么情况下用int main(int argc, char *argv[])  。

我们需要和程序进行交互。你知道,在程序运行过程中,可以通过scanf函数,输入数组、字符、字符串给程序处理。

那么能不能在程序启动的时候(),就携带参数给他,而不是运行过程中敲入东西给程序。这时候需要用用到带参数(int argc, char *argv[])的main函数。

你很可能用过ping命令,去ping一个IP地址,比如:ping 192.168.0.1

其实这个里的ping就是一个exe程序,"192.168.0.1"是一个字符串,是我们传递给程序的参数。

所以,当你需要程序带参数地启动的时候,就用int main(int argc, char *argv[])。

2.怎么使用argc和argv参数。

你可能会想,argc和argv是传给main函数的参数。那这个参数是谁传的?main函数不是已经是入口函数了吗?还有别的函数调用main函数?

argc和argv是你通过命令行窗口传给程序的。

你先猜猜下面的程序运行结果是什么?

#include <stdio.h>
int main(int argc , char *argv[])
{printf("argc = %d\n", argc);printf("%s\n", *argv);
}

我们编译运行,结果如下。有没有发现,*argv是字符串,字符串的内容是exe程序文件名(包括它的完整路径)。

argc = 1,这个表示什么?表示的是命令行有1个字符串,这个字符串是"D\test\main_arg_argv.exe",也就是我们的程序名。

你可能会想:

(1)那怎么通过命令行给程序传递字符串呢?

(2)程序是怎么样获取到传递来的字符串呢?

答案是:

(1)用这样的格式给程序传递字符串:

程序名.exe   字符串1 字符串2 字符串3 ... 字符串n

执行exe程序时,你可以在.exe名字后面加上任意多个字符串。每个字符串用空格隔开。

(2)在main函数里通过循环依次一个个地来接收字符串。

举个例子:

我们来做这样一个程序:

要求:

传递的某个字符串等于"Aa"就打印"A for apple",传递的某个字符串里等于"Bb"就输出"B for ball",传递的某个字符串等于"Cc"就输出"C for ball",传递的某个字符串等于"Dd"就输出"D for dog".

先上代码:

#include <stdio.h>
#include <string.h>int main(int argc , int *argv[])
{printf("argc = %d\n", argc);argv++;while (*argv){if (strcmp(*argv, "Aa") == 0){argv++;printf("A for apple\n");}else if (strcmp(*argv, "Bb") == 0){argv++;printf("B for ball\n");}else if (strcmp(*argv, "Cc") == 0){argv++;printf("C for cat\n");}else if (strcmp(*argv, "Dd") == 0){printf("in d\n");argv++;printf("D for dog\n");}}
}

注意这个时候,我们就不能直接在编辑器里直接运行程序,因为这样自动运行是没有参数的。

点下图中的编译按钮。然后进入源文件所在文件夹:D:\test。可以看到生成了一个文件名叫main_argc_argv.exe,这个就是编译生成的可执行文件,俗称“程序/软件”。

D:\test\main_argc_argv.exe

那么怎么运行呢?

打开命令行,鼠标左键选中.exe文件,拖到cmd窗口中:

然后在后面加上我们想要加的字符串。这里加上"Cc"和"Aa"

然后,按回车键运行。

如我们所期望的,命令行我们敲参数时,Cc在Aa前面,所以先打印出"C for cat",后打出"A for apple"。

注意:这里的argc是3,表示的是什么呢?

之前我们说过,arrgc=1时,表示命令行只有一个字符串,是程序名"D\test\main_arg_argv.exe"。

3表示命令行有3个字符串,分别是:程序名"D\test\main_arg_argv.exe"、"Cc"和"Aa"。

这下你应该明白怎么使用main函数中的参数了。

3.总结

当你需要程序带参数地启动的时候,就用int main(int argc, char *argv[])。

扫描二维码 关注微信公众号"C语言初学者之家"

看完你就明白:什么情况下该用int main(int argc, char *argv[])而不是int main(void)相关推荐

  1. 硬件:笔记本电脑7大分类总结,看完你就明白了!

    今天给大家分享笔记本电脑7大场景分类,看完你就明白了! 游戏本 游戏本最早由外星人和微星推出,在90年代就引起了众多游戏玩家的热捧.目前游戏本在笔记本电脑市场可谓是超级火爆,基本每个大厂商都推出了专门 ...

  2. 你的Scrum迭代够精益吗?看完就全明白了

    你的Scrum迭代够精益吗?看完就全明白了 原文 http://www.jackyshen.com/2017/08/02/is-your-Scrum-lean-enough/ Scrum与产品创新 V ...

  3. 游戏伤害计算机,阴阳师:输出和防御之间的各种计算,看完就能明白游戏的伤害机制...

    原标题:阴阳师:输出和防御之间的各种计算,看完就能明白游戏的伤害机制 小伙伴们大家好,今天小编给大家科普一下游戏输出和防御之间的各种计算公式吧,相信在清楚伤害计算之后大家对各种属性的搭配也会有更好的理 ...

  4. MySQL索引-B+树(看完你就明白了)

    索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据. 索引最形象的比喻就是图书的目录了.注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 ...

  5. 计算机显示器的三原色是,显示器参数看不懂?看完你就明白啦!

    原标题:显示器参数看不懂?看完你就明白啦! 对于电脑性能最直观的感受,就是通过显示器来感受.现在的各种显示器选择很多,各种参数也很多,无论是游戏.绘图.影视还是普通的商务用显示器都有不同的需求,因此选 ...

  6. 怎样发量暴增_发量少怎么办如何增加发量?看完你就明白了

    发量少怎么办如何增加发量?看完你就明白了 随着社会压力的增大,很多疾病都跻身于医学界,脱发就是最常见的疾病之一,尤其是脂溢性脱发!之前我们讲到过,脂溢性脱发从中医角度来看主要是分为临泣穴脱发和百会穴脱 ...

  7. 虹科分享 | 简单实用的CANopen介绍,看完你就明白了(2)——CANopen框架与七种服务类型

    目前,CANopen通讯协议已经在工业领域得到了广泛的使用,由于其面向对象的设计思路,CANopen协议已成为欧洲等国家的自动化公司标配的通讯接口之一.在本系列文章中,我们将介绍CANopen协议的基 ...

  8. 计算机专业对应的职业,这十个高薪职业对应哪些大学专业?看完你就明白啦

    原标题:这十个高薪职业对应哪些大学专业?看完你就明白啦 每年高考结束后,报考大学填报专业渐渐成为广大考生和家长最头疼的事情,报考大学还好说一些,毕竟每一位高三考生心中都根据自己的实际情况,曾经设想过几 ...

  9. 清华计算机2017学硕,2017级清华大学研究生来自于哪些大学?看完你就明白啦!...

    原标题:2017级清华大学研究生来自于哪些大学?看完你就明白啦! 清华大学,作为我国高校中的顶尖学府,是很多学生心中的梦想之地,每年的高考中,只有各省的前几十名才有机会被清华大学录取.但是研究生,作为 ...

最新文章

  1. 天池算法赛:数据挖掘经典赛事!DCIC 2020 数字中国创新大赛启动!
  2. MySQL数据库中的事务(四大特性)
  3. 剑指Offer系列 重建二叉树
  4. 单片机向左,嵌入式向右
  5. 字节流和字符流复制文件内容实例
  6. python3 爬虫4--解析链接
  7. mysql如何定位到数据_如何快速定位当前数据库消耗CPU最高的sql语句?
  8. kibana 查询_Exceptionless服务端+kibana部署实时日志纪要
  9. ubuntu双系统时间同步_解决Ubuntu 16.04.6 + Win10 双系统时间错误且不一致问题
  10. python一个函数可以有参数也可以没有参数_Python:有和没有关键字参数的lambda函数行为?...
  11. MFC 小知识总结五
  12. detr 历史解析代码_视觉/ DETR变压器
  13. Python 爬取zw年鉴
  14. Linux服务器中查询IP地址五个方法
  15. html+dfn标签,HTML DOM DFN用法及代码示例
  16. TencentOS 3.1安装MySQL 8.0.32
  17. android11obb,exagear安卓11数据包obb
  18. CTF网络安全大赛介绍
  19. 服务器配置和部署(待完善)
  20. XSL中特殊符号详解

热门文章

  1. 小师弟肝了七天七夜,东半球最全「后台开发」学习路线出炉
  2. mysql之 1044 - Access denied for user ‘justcall‘@‘%‘ to database ‘mysql‘
  3. Sharding-JDBC 之公共表
  4. 如何确定K-means算法中的k值?
  5. android sharesdk 使用教程,Android中使用ShareSDK学习
  6. Srvctl命令详细
  7. linux SIGSEGV信号
  8. ibm bpm开发 手册_使用定制的IBM BPM数据处理程序简化管理复杂输入数据的方式
  9. IT领域什么创业项目有前途
  10. 十大哲理故事(zt)