天天看点

《指针的编程艺术(第二版)》一3.7 命令行参数include include include include

本节书摘来自异步社区《指针的编程艺术(第二版)》一书中的第3章,第3.7节,作者 蔡明志,更多章节内容可以访问云栖社区“异步社区”公众号查看

指针的编程艺术(第二版)

在c程序语言中,函数是平等的,而main() 函数是程序的进入点。在执行程序时可以附加一些选择项,这有点类似早期dos(现称为命令行参数模式)的指令或unix的指令,如dos的dir/w,其中的/w为一个选择项,表示当执行dir指令时,是以wide的模式输出,如unix下的

int main(int argc, char *argv[])<code>`</code>

这条语句多加了两个参数,第一个为argc,表示参数个数(argument count){xe "rgc,表示參數個數(argument count)"},其数据类型是int,另一个为argv,表示参数向量(argument vector){xe "argv,表示參數的向量(argument vector)"},它是指向一个数组指针的变量,这个数组的每一个元素都为指向某一字符串的指针。argc和argv名称不是绝对的,你也可以选取你喜欢的名称。我喜欢这个名称的原因是因为可以很容易了解其代表的含义。

命令行参数的重点在于判断有无附加的选择项,以及如何得到那些附加的选择项,以便进一步的工作。

当argc &gt; 1时,表示有附加的选择项,可使用argv取得,例如,有一程序sort.c,经compile及link得到一个执行文件sort.exe(假设在c:prog的目录下),因此,可在命令行提示符的模式下,输入以下的数据,

/ commandline-1.c /

int main(int argc, char *argv[])

{

  int i;

  printf("argc = %dn", argc);

  for(i=0; i    printf("argv[%d]=%sn", i, argv[i]);

  printf("(argv[2]+2)=%cn", (argv[2]+2));

  printf("((argv+2)+2)=%cn", ((argv+2)+2));

  printf("n");

  getch();

  return 0;

}

/ commandline-2.c /

  if (argc == 2) {

    switch(*(argv[1]+1))

      {

      case 'd':

        system("dir/w c:\");

        break;

      case 't':

        system("type c:\commandline.c");

      default:

        printf("using commandline -d or -t");

    }

  }

  else

    printf("using commandline -d or -t");

输出结果