C语言 argc和argv

argc和argv是最熟悉的陌生人。

为什么说他们熟悉,是因为如果你用的IDE比较多,大部分的main函数的样子是这样子的int main(int argc, char *argv[]);

说它们陌生是因为,你可能写了半年的程序也没有实际用过这两个参数,不明所以。

好的,先来说说它们的叫法,或许也不对:

argc:argument counter,读作arg - C,是一个整型

argv:argument vector,读作 arg-V,是一个二维字符数组

具体什么意思呢,还记不记得前面说的scanf,可以采集键盘输入,恩,运行程序,然后等待我们输入,这两个参数的含义是在运行程序的时候就直接输入,比如,有两个程序bigger和smaller,我想后面直接跟两个参数来输入较大值 或者较小值,用法如下:

1

2$ ./bigger 5 4

$ ./smaller 15 23

这个时候就需要argc和argv了。

比如下面这个例子:

1

2

3

4

5

6

7

8

9/*beginner/argcargv/argcargv1.c*/

#include

int main(int argc, char *argv[])

{

printf("argc = %d\n", argc);

return 0;

}

编译运行:

1

2

3

4

5

6

7

8

9

10

11

12$ ./argcargv1

argc = 1

$ ./argcargv1 1

argc = 2

$ ./argcargv1 1 2

argc = 3

$ ./argcargv1 1 2 3

argc = 4

$ ./argcargv1 1 2 3 4

argc = 5

$ ./argcargv1 1 2 3 4 1234

argc = 6

哇,amazing,argc的值根据你的输入参数在自动修改,这就是argc的意思,就是命令行的个数统计。

下面看看argv的用法,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12/*beginner/argcargv/argcargv2.c*/

#include

int main(int argc, char *argv[])

{

printf("argv are :\n");

int i;

for (i = 0; i < argc; i++)

printf("argv[%d] = %s\n", i, argv[i]);

return 0;

}

这里有个需要留意的地方,就是我们在使用argv的时候需要配合argc,因为这就涉及到数组溢出的issue了。

结果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15$ ./argcargv2 1

argv are :

argv[0] = ./argcargv2

argv[1] = 1

$ ./argcargv2 1 2

argv are :

argv[0] = ./argcargv2

argv[1] = 1

argv[2] = 2

$ ./argcargv2 1 2 34

argv are :

argv[0] = ./argcargv2

argv[1] = 1

argv[2] = 2

argv[3] = 34

综上,我们就可以写个bigger的demo程序了,先自己想想如何写。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21/*beginner/argcargv/argcargv3.c*/

#include

#include

int main(int argc, char *argv[])

{

if (argc != 3)

{

printf("Usage :\n");

printf(" ./argcargv3 num1 num2\n");

exit(0);

}

if (atoi(argv[1]) > atoi(argv[2]))

printf("Bigger is %d\n", atoi(argv[1]));

else

printf("Bigger is %d\n", atoi(argv[2]));

return 0;

}

测试如下:

1

2

3

4

5

6

7

8

9$ ./argcargv3

Usage :

./argcargv3 num1 num2

$ ./argcargv3 3 6

Bigger is 6

$ ./argcargv3 9 6

Bigger is 9

哇哦,又来了一点新东西,首先头文件加了stdlib,这个主要是因为使用了函数atoi,这个函数的含义就是把字符转换为数字,因为命令行参数的类型是char *的,所以在进行比较的时候要转换为整数。

编译运行

直接输入make就可以了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#beginner/argcargv/Makefile

ALL : argcargv1 argcargv2 argcargv3

argcargv1: argcargv1.c

gcc -o argcargv1 argcargv1.c

argcargv2: argcargv2.c

gcc -o argcargv2 argcargv2.c

argcargv3: argcargv3.c

gcc -o argcargv3 argcargv3.c

.PHONY : clean

clean:

rm -f argcargv1 argcargv2 argcargv3

c语言argc,C语言 argc和argv相关推荐

  1. c 语言 int argc,C语言深度学习之int main(int argc,char **argv)的理解及延申

    C语言深度学习之int main(int argc,char **argv)的理解及延申 前者为可接受 命令行参数,argc表示参数个数, argv[]是参数数组,其中第0个参数是程序本身的名称(包含 ...

  2. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  3. C语言 static - C语言零基础入门教程

    目录 一.static 简介 二.static 修饰变量 1.static 局部静态变量 2.static 全局静态变量 三.static 修饰函数 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : ...

  4. C语言 extern - C语言零基础入门教程

    目录 一.简介 二.extern 修饰变量 1.在单文件中使用 extern 2.在多文件中使用 extern 三.extern 修饰函数 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C+ ...

  5. C语言 局部变量 - C语言零基础入门教程

    目录 一.局部变量简介 二.局部变量注意事项 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.局部变量简介 定义在函数内部的变量称为局 ...

  6. C语言 全局变量 - C语言零基础入门教程

    目录 一.全局变量简介 二.全局变量使用 三.全局变量使用注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.全局变量简介 在所 ...

  7. C语言核心技术-C语言概述与开发环境搭建

    C语言概述 C语言发展简史 起源 1972年,贝尔实验室的Dennis Ritchie和Ken Thompson在开发Unix操作系统时设计了C语言,该操作系统的90%以上的代码都是由C语言实现,后期 ...

  8. 【C语言】C语言笔记

    fabs用来求double类型的绝对值,小数点后保留6位#include<math.h> double fabs(double ) labs用来求长整型long整型的绝对值, long c ...

  9. 【C语言】C语言实现中文字符(句号,感叹号,问号)的十进制数值

    文章目录 [C语言]C语言实现中文字符(句号,感叹号,问号)的十进制数值 一.前言 二.说明 三.代码实现 3.1 代码 3.2 文本文件内容 3.3 结果 四.说明 [C语言]C语言实现中文字符(句 ...

最新文章

  1. 【错误总结】Git- remote:error: this exceeds GitHub file size limit of 100.00 MB
  2. 中国人工智能学会通讯——艺术与人工智能的明天——人机信任合作 一、人工智能在艺术上的发展...
  3. 将C#编译为javascript
  4. ifconfig命令实例
  5. Keycloak简单几步实现对Spring Boot应用的权限控制
  6. 如何使Layouts里的页面应用站点母板页
  7. difftime(转)
  8. 03.德国博士练习_02_admin_cluster
  9. quartz 每月一次_Quartz Cron表达式 每周、每月执行一次
  10. 几种常见窗函数及其matlab程序实现,几种常见窗函数及其MATLAB程序实现(20200911110057).pdf...
  11. Linux下开发常用的CVS使用手册
  12. ios 6.1中 Release问题
  13. STM8学习笔记---union联合体的应用
  14. 【笔试/面试】—— 计算一个数二进制形式中 0 的个数
  15. java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
  16. html_头部meta设置
  17. python字典快速一览
  18. 同花顺数据同步到mysql_同花顺数据库怎么购买,同花顺ifind账号
  19. 使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
  20. 什么是网站前端框架?目前常用的网站前端框架都有哪些?

热门文章

  1. [C指针] 用图表解读C声明:Unscrambling C Declarations by Diagram
  2. Django模板:过滤器
  3. Python保留字,keyword
  4. web前端基础(13js语法基础)
  5. easyUI +datagirdview加载本地json的方式 笔记
  6. nginx离线安装_做一个属于自己的离线下载服务器原来这么简单
  7. pythoncsv数据类型_python – 从CSV文件行中的值确定数据类型
  8. Stringbuffer的线程安全是怎么实现的
  9. abcdefg顺序Java打印,全国2012年10月自考JAVA语言程序设计(一)试题及答案
  10. 在ASP.NET Identity 2.0中使用声明(Claims)实现用户组