有些.exe程序可以带参数运行,比如:ping localhost -t。
这里localhost,-t就是参数,main(int argc, char *argv[])就是为了让程序里面能使用参数,argc是argument count的缩写,表示参数的个数,argv是argument value的缩写,表示参数的值,argv是一个字符指针数组,每一个元素指向一个字符串,其中argv[0]指向程序的路径名,argv[1]指向第一个参数字符串。
需要注意的是,.exe程序的完整文件名也算在参数里面,所以ping localhost -t的argc是3。
如果需要在程序里面使用这些参数的话,可以模仿下面的代码:
int main(int argc, char *argv[])
{
int i = 0;
printf("argc: %d\n", argc);
for(i = 0; i < argc; i++)
{
printf("Arg %d : %s\n", i + 1, argv[i]);
}
return 0;
}
程序运行结果是:
argc: 1
Arg 1 : C:\Program Files\Microsoft Visual Studio\MyProjects\a\Debug\a.exe
Press any key to continue
再看另一个例子:
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) { printf("argc = %d\nargv[0] = %s\n", argc, argv[0]); int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; int f = 0; int g = 0; int i = 0; for (i = 1; i < argc; i++) { if (*(argv[i]) == '-') { switch (*(argv[i]+1)) { case 'a': a = atoi(argv[++i]); break; case 'b': b = atoi(argv[++i]); break; case 'c': c = atoi(argv[++i]); break; case 'd': d = atoi(argv[++i]); break; case 'e': e = atoi(argv[++i]); break; case 'f': f = atoi(argv[++i]); break; case 'g': g = atoi(argv[++i]); break; default: break; } } } printf("The value of a is %d\n", a); printf("The value of b is %d\n", b); printf("The value of c is %d\n", c); printf("The value of d is %d\n", d); printf("The value of e is %d\n", e); printf("The value of f is %d\n", f); printf("The value of g is %d\n", g); return 0; }
|
刚接触到这两个变量时,根本不知道它们是用来做什么的,我想很多人也跟我一样,刚看到这两个变量时也是稀里糊涂的。
其实: int main(int argc,char *argv[]) 是 UNIX 和 Linux 中的标准写法,而 int main() 只是 UNIX 及 Linux 默许的用法..
那究竟 argc,argv[] 有何之用呢?下面看个例子 edit.c 就会明白它们的用法了:
#include
#include
int main(int argc,char *argv[])
{
if(argc==1 || argc>2) {
printf("请输入想要编辑的文件名如:./edit fillen");
}
if(argc==2) {
printf("编辑 %sn",argv[1]);
}
exit(0)
}
编译该程序:gcc -o edit edit.c
运行:./edit
结果:请输入想要编辑的文件名如:./edit fille
运行:./edit edit.txt
结果:编辑 edit.txt
看到这里 argc,argv[] 如何用就很明白了,
argc 是外部命令参数的个数,
argv[] 存放各参数的内容,如上例:
执行 ./edit 时,argc 为1, argv[0] 为 ./edit .
而执行 ./edit edit.txt 时,argc 的值为 2, argv[0] 为 ./edit,argv[1] 为 edit.txt .
main()函数的几种参数类型:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不
用argv[]的情况。
*env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数:
/*program name EXAMPLE.EXE*/
#include
#include
main(int argc, char *argv[], char *env[])
{
int i;
printf("These are the %d command- line arguments passed to
main:\n\n", argc);
for(i=0; i<=argc; i++)
printf("argv[%d]:%s\n", i, argv[i]);
printf("\nThe environment string(s)on this system are:\n\n");
for(i=0; env[i]!=NULL; i++)
printf(" env[%d]:%s\n", i, env[i]);
}
阅读(4326) | 评论(0) | 转发(1) |