先来说下参数的作用。有时候程序运行的时候需要在DOS命令行下输入字符串给main函数提供一些参数。比如有时候需要指明文件名,就得通过argv来传递。
int main(int argc, char *argv[],char *envp[])
arg是命令行总的参数个数;
argv[]是argc个参数,其中第0个参数是程序的全名,有些版本的编译器甚至还包括程序文件所在的路径,后面的参数命令行跟的用户输入的参数。一般用来为程序提供非常重要的信息,例如数据文件名
envp[]用来取得系统的环境变量。
如:在DOS下,有一个PATH变量。当你在DOS提示符下输入一个命令(当然,这个命令不是dir一类的内部命令)的时候,DOS会首先在当前目录下找这个命令的执行文件。如果找不到,则到PATH定义的路径下去找,找到则执行,找不到返回Bad command or file name。
在DOS命令提示符下键入set可查看系统的环境变量。
同样,在UNIX或者LINUX下,也有系统环境变量,而且用得比DOS要多。如常用的$PATH,$USER, $HOME等等。
环境变量一般用来为程序提供附加信息。你做了一个显示文本的内容的程序。你想控制其一行中显示的字符的个数。你可以自己定义一个环境变量(UNIX下)
%setenv NUMBER = 3
%echo $NUMBER
3
然后你可以在程序中读入这个环境变量。然后根据其值决定一行输出多少个字符。这样,如果你不修改环境变量的话,你每次执行这个程序,一行中显示的字符数都是不一样的。
下面是一个例子程序
#include<stdio.h>
int main(int argc,char *argv[],char *envp[]){
int i;
printf("You have inputed total %d argments\n",argc);
for(i=0;i<argc;i++){
printf("arg[%d]:%s\n",i,argv[i]);
}
printf("The envp:\n");
for(i=0;*envp[i]!='\0';i++){
printf("%s\n",envp[i]);
}
return 0;
}
D:\>argtest this is a test program of main()'s argments
You have inputed total 9 argments
arg[0]:D:\TC\NONAME.EXE
arg[1]:this
arg[2]:is
arg[3]:a
arg[4]:test
arg[5]:program
arg[6]:of
arg[7]:main()'s
arg[8]:argments
The envp:
TMP=C:\WINDOWS\TEMP
TEMP=C:\WINDOWS\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
COMSPEC=C:\WINDOWS\COMMAND.COM
SBPCI=C:\SBPCI
windir=C:\WINDOWS
BLASTER=A220 I7 D1 H7 P330 T6
CMDLINE=noname this is a test program of main()'s argments