Chinaunix首页 | 论坛 | 博客

  • 博客访问: 480471
  • 博文数量: 86
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 878
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 14:11
文章分类

全部博文(86)

文章存档

2010年(12)

2009年(60)

2008年(14)

我的朋友

分类: C/C++

2008-11-24 12:38:33

有些.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]);
     }
阅读(4318) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~