主函数的三个参数
int main(int argc, char* argv[], char* envp[])
argc
主函数的参数个数argv
主函数的参数内容envp
环境变量
首先我们写这样一段代码,来查看main
函数的参数都有那些
#include<stdio.h>
int main(int argv,char argv[],char envp[])
{
int i = 0;
printf("argc = %d\n",argc);
for(;i<argv;i++)
{
printf("argv[%d] = %s\n",i,argv[i]);
}
return 0;
}
编译后,./main
执行得到
显示有一个参数,参数是“.main”
我们再次执行,这次输入./main hello 123
看看会得到什么
看到我们的主函数分别把输入的每个字符串都存储为一个参数
但是如果我们这样输入,./main "hello 123"
这样主函数会识别为两个参数,因为主函数是以字符串的方式来进行接收参数的
像例如我们经常使用的命令:ls -l
这些 -l
也就是作为参数,传递进程序
我们修改一下上面的代码,再来看看环境变量
#include<stdio.h>
int main(int argc,char* argv[],char* envp[])
{
int i = 0;
printf("argc = %d\n",argc);
for(;i<argc;i++)
{
printf("argv[%d] = %s\n",i,argv[i]);
}
for(int i =0;envp[i]!=NULL,i++)
{
//环境变量结束会指向一个空指针
printf("envp[%d] = %s\n",i,envp[i]);
}
return 0;
}
理论上讲,环境变量来自父进程的继承,我们编译运行这个程序
输出了非常多的信息,一共有57个环境变量,我们人为为他增加一个环境变量
每当我们运行./main
的时候都是通过bash
来复制一个进程替换我们需要执行的程序,所以main
程序会继承我们刚才在bash
上添加的环境变量
执行发现,首先环境变量数量变多了一个,多的那个一个就是我们新添加的"MYSTR"