Linux C语言:main函数的命令行传参

Linux TOMORROW 1年前 (2018-07-08) 950次浏览 1个评论 扫描二维码
关国源 Linux 微知识

在大学里面,老师一般会这样教,定义main 函数应该是这样的:

Linux C 语言:main 函数的命令行传参

甚至是这样的:

Linux C 语言:main 函数的命令行传参

但是其实在 Linux 下,一个正确的main 函数应该被定义为如下:

Linux C 语言:main 函数的命令行传参

大家可以看到,main 函数中有两个参数,分别是 argc 和 argv。但是在 C 语言中规定,main 函数是不能被别的函数调用的,那究竟是谁传递了参数给main 函数呢?

答案是:命令行

当我们在命令执行程序时,其实就是在给main 函数传递参数,其中 argc 的全称是 argument count,即命令行的参数的数目。 argv 的全称是 argument value,即命令行的参数对应的值。

我们先来研究一下这个 argc 吧,注意,这个 argc 指的不是额外的参数,而是包含执行文件在内的参数个数。举个例子吧,假设有程序如下:

Linux C 语言:main 函数的命令行传参

执行程序结果:

Linux C 语言:main 函数的命令行传参

命令行的参数是以空格分开,大家可以看到,argc 就是参数个数,包含执行的文件在内。

那么再来看看这个 argv,类型是 char *[],如果有一定 C 语言功底的同学应该知道,这个是一个字符指针数组,通俗一点来讲,就是一个数组名字叫 argv,并且数组中放着很多个字符串:

Linux C 语言:main 函数的命令行传参

那么究竟是谁放在里面呢?没错,就是命令参数的值,以上面的实例为例子

gec@ubuntu:~$ ./example one two three 代表当前有 4 个参数,那么 argv 的数组中就应该是这样的:

Linux C 语言:main 函数的命令行传参

那么数组访问每个成员,我们在大学里面已经学习过了,使用下标就可以访问:argv[0]为数组第一个成员,argv[1]为数组第二个成员,如此类推。

那么接下来写个程序验证一下:

Linux C 语言:main 函数的命令行传参

执行的结果:

Linux C 语言:main 函数的命令行传参


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux C 语言:main 函数的命令行传参
喜欢 (4)
TOMORROW
关于作者:
一个从石头坑掉到泥坑里的攻城狮。
如意的吐司发表我的评论  请填写正确的 个人信息
取消评论
表情 加粗 斜体 签到
(1)个小伙伴在吐槽
  1. 哇塞,居然是沙发?留个名
    被窝电影网2019-05-05 21:25 回复 Windows 7 | 未知浏览器