c语言argc,C语言 argc和argv
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相关推荐
- c 语言 int argc,C语言深度学习之int main(int argc,char **argv)的理解及延申
C语言深度学习之int main(int argc,char **argv)的理解及延申 前者为可接受 命令行参数,argc表示参数个数, argv[]是参数数组,其中第0个参数是程序本身的名称(包含 ...
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...
- C语言 static - C语言零基础入门教程
目录 一.static 简介 二.static 修饰变量 1.static 局部静态变量 2.static 全局静态变量 三.static 修饰函数 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : ...
- C语言 extern - C语言零基础入门教程
目录 一.简介 二.extern 修饰变量 1.在单文件中使用 extern 2.在多文件中使用 extern 三.extern 修饰函数 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C+ ...
- C语言 局部变量 - C语言零基础入门教程
目录 一.局部变量简介 二.局部变量注意事项 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.局部变量简介 定义在函数内部的变量称为局 ...
- C语言 全局变量 - C语言零基础入门教程
目录 一.全局变量简介 二.全局变量使用 三.全局变量使用注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.全局变量简介 在所 ...
- C语言核心技术-C语言概述与开发环境搭建
C语言概述 C语言发展简史 起源 1972年,贝尔实验室的Dennis Ritchie和Ken Thompson在开发Unix操作系统时设计了C语言,该操作系统的90%以上的代码都是由C语言实现,后期 ...
- 【C语言】C语言笔记
fabs用来求double类型的绝对值,小数点后保留6位#include<math.h> double fabs(double ) labs用来求长整型long整型的绝对值, long c ...
- 【C语言】C语言实现中文字符(句号,感叹号,问号)的十进制数值
文章目录 [C语言]C语言实现中文字符(句号,感叹号,问号)的十进制数值 一.前言 二.说明 三.代码实现 3.1 代码 3.2 文本文件内容 3.3 结果 四.说明 [C语言]C语言实现中文字符(句 ...
最新文章
- 【错误总结】Git- remote:error: this exceeds GitHub file size limit of 100.00 MB
- 中国人工智能学会通讯——艺术与人工智能的明天——人机信任合作 一、人工智能在艺术上的发展...
- 将C#编译为javascript
- ifconfig命令实例
- Keycloak简单几步实现对Spring Boot应用的权限控制
- 如何使Layouts里的页面应用站点母板页
- difftime(转)
- 03.德国博士练习_02_admin_cluster
- quartz 每月一次_Quartz Cron表达式 每周、每月执行一次
- 几种常见窗函数及其matlab程序实现,几种常见窗函数及其MATLAB程序实现(20200911110057).pdf...
- Linux下开发常用的CVS使用手册
- ios 6.1中 Release问题
- STM8学习笔记---union联合体的应用
- 【笔试/面试】—— 计算一个数二进制形式中 0 的个数
- java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
- html_头部meta设置
- python字典快速一览
- 同花顺数据同步到mysql_同花顺数据库怎么购买,同花顺ifind账号
- 使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
- 什么是网站前端框架?目前常用的网站前端框架都有哪些?
热门文章
- [C指针] 用图表解读C声明:Unscrambling C Declarations by Diagram
- Django模板:过滤器
- Python保留字,keyword
- web前端基础(13js语法基础)
- easyUI +datagirdview加载本地json的方式 笔记
- nginx离线安装_做一个属于自己的离线下载服务器原来这么简单
- pythoncsv数据类型_python – 从CSV文件行中的值确定数据类型
- Stringbuffer的线程安全是怎么实现的
- abcdefg顺序Java打印,全国2012年10月自考JAVA语言程序设计(一)试题及答案
- 在ASP.NET Identity 2.0中使用声明(Claims)实现用户组