在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。
* argc: 整数, main()的命令行参数个数。
* argv: 字符串数组。
argv[0] 为程序运行的全路径名
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
argv[2] 为执行程序名后的第二个字符串;
...
argv[argc]为NULL。
*env: 字符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符
串。其中ENVVAR为环境变量。value 为ENVVAR的对应值
#include <stdlib.h>
#include <stdio.h>
main(int argc, char *argv[], char *env[])
{
int i;
printf("%d/n", argc); /* 为什么它的输出是 1, 它到底
是定义什么的,我看不明上面的解释*/
for(i=0; i<=argc; i++)
printf("argv[%d]:%s/n", i, argv[i]);
for(i=0; env[i]!=NULL; i++)
printf(" env[%d]:%s/n", i, env[i]);
}
argc, argv, env是在main()函数之前被赋值的,编译器生成的可执行文件,main()不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。
printf("%d/n",argc) //这儿输出1是正确的,因为可执行文件名算第一个参数,即argv[0] == 可执行文件名
argc包含命令行选项的个数,argv包含argc个C风格字符串,代表由空格分开的命令选项比如说 你输入可执行程序的名字 work.exe 后面跟上 -d -o....
那么argv[0] = work.exe argv[1] = -d argv[2] = -o
你可以让他们输出看看
给一个例子:
#include <stdio.h>;
int main(int argc, char *argv[])
{
printf("%d/n",argc);
while(argc)
printf("%s/n",argv[--argc]);
return 0;
}
假设将其编译为test.exe,
在命令行下,
test hello
得到的输出结果为
2
hello
test
main(int argc, char *argv[]),其中argc是指变量的个数,本例中指test和hello,即为2,
argc至少为1,原因就不用我说了吧
argv是一个char *的数组,其中存放变量的内容,此处
argv[0]中存放test,argv[1]存放hello
这个例子真的太经典了,所以留了下来。对于理解argv[]函数是很管用的。