main函数的两个参数:argv[],argc

        首先来看一段简单的代码,入门的helloworld:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

输出: hello world!

        如果把上面的代码换成下面的代码,再来看一下结果:

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    printf("hello world!\n");
    return 0;
}

结果是一样的:

        如果这么看的话,那这两个参数好像一点用都没有,毕竟一般来说,一个函数带参数,那总要有另一个函数调用它给它传值才对,但是main身为主函数,谁能调用它给它传值呢 ?答案要在Linux里面找。

        刚开始学C语言的时候,大部分人都是使用的Windows下的各种开发平台,比如vc++,vs,这些平台都有一个按钮,可以一键编译运行,用惯了这些按钮,初学者压根想不到可以在运行程序的时候传参数给程序,也就是说,这段代码不会再接收到来自程序员手动传入的参数,所有要用到的数据都已经在代码中定义好了,main函数在整个代码中就是老大,只有它调用别的函数、给别的函数传参的份,这个时候,main函数不带任何参数很正常。

        但如果是在Linux中编译运行代码,可没有按钮这么方便,在linux中只能手动敲指令运行程序了,例如,在我的目录下有一个已经编译好的可以直接运行的可执行文件 a.out,那么我想运行它,就只能在终端上敲 :./a.out ,这时候会显示:hello world!,代表运行成功。

        在windows里面想不到参数从哪来,在Linux中就很容易想到了吧!就是在输入运行指令的时候啦,这个时候可以多敲些字符串,这些字符串就会被 argv 接收,而你输入的字符串的总个数会被 argc 保存下来。比如:把程序改成下面这样:

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    printf("hello world!\n\n");
    for(i=0;i<argc;i++)
        printf("%s\n",*(argv+i));
    return 0;
}

然后在运行的时候,后面随便敲几个字符串(以空格分开),像下面这样:

                ​​​​​​​        

我在后面加了三个字符串,“hhhh”,“iiiii”,“oooo”,for循环不仅把这三个字符串输出来了,还输出了运行程序的指令:./a.out。也就是说,argv会接受我在终端输入的所有字符串,这些字符串以空格分开,而,argc则接收输入字符串的个数,在这里是 4。

argv:argument vector;

argc:argument count;

 

        如果接触过Linux的指令,那对一些常用的指令,比如ls -l、cd /home....肯定有映象,在Linux中,这些指令也只不过是可执行程序而已,它们也是通过编译链接后才得到可执行文件,本质上,和上面的a.out一样,我们在用这些指令的时候,其实就是在执行这些可执行文件,上面的例子中,我传入的参数没有任何意义,但是对于Linux中的指令来说,这些参数必不可少,当你执行ls -l指令时,“-l”就是你传入的第二个参数,这个参数会被 ls 源代码中的 argv 接收,它接收到这个参数,才能知道到用户的请求,才会按照要求输出当前目录下所有目录和文件的详细信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值