天天看點

《指針的程式設計藝術(第二版)》一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");

輸出結果