本節書摘來自異步社群《指針的程式設計藝術(第二版)》一書中的第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 > 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");
輸出結果