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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值