http://blog.csdn.net/daheiantian/article/details/6246519
2011
命令行參數(shù)的最大作用就是讓我們可以在程序之外控制程序,例如linux或者dos中我們經(jīng)常使用的命令,從本質(zhì)上將是一個程序;而我們使用的參數(shù),就是該命令(對應(yīng)的程序)的命令行參數(shù)。
正是由于命令行的這么重要的作用,所以它成為各種編程語言不可缺少的功能,只是實(shí)現(xiàn)細(xì)節(jié)上略有不同,但大體上都是一樣的,而且都比較簡單。
1.1 程序中在哪里接收命令行參數(shù)(where)
命令行參數(shù),顧名思義,就是在命令行調(diào)用程序時傳遞的參數(shù),那么誰來接收呢,一定是main函數(shù)了,因?yàn)槌绦蚴菑膍ain函數(shù)開始執(zhí)行的啊。那作為一個函數(shù),main怎么接收參數(shù)呢,很明顯,用參數(shù)接收是最簡單的方式。
1.2 程序中怎樣接收去接收參數(shù)(how)
想一下現(xiàn)在linux或者dos命令中使用參數(shù)的形式,你是否能想到一個比現(xiàn)在的方式更簡單的方式:【命令 選項(xiàng) 參數(shù)】。我是想不出來了,那么針對這種方式,如何來接收呢。其實(shí)也很簡單,因?yàn)樗鼈兪褂每崭穹珠_的,所以我們只要將它們作為字符串依次存在一個數(shù)組里就行了,也就是使用一個指針數(shù)組,每個元素是一個字符指針。對于數(shù)組我們經(jīng)常使用的一個特性就是數(shù)組的長度,為了防止每次都自己編寫代碼求長度(實(shí)際上是重復(fù)勞動,因?yàn)榍笠粋€指針數(shù)組的長度代碼是固定的),所以顯式的提供給我們這個長度是比較好的。
將main函數(shù)的聲明為如下形式:
注意事項(xiàng):
1. argv是一個指針數(shù)組,要明白它的存數(shù)格式。它的每個元素都是一個字符指針,數(shù)組的末尾是一個NULL指針。
2. 也是由于argv是一個指針數(shù)組,它指向數(shù)組的第一個元素(是一個字符指針),所以argv是一個指向字符指針的指針,所以可以將其聲明為char **argv。即聲明為:【 int main( int argc, char **argv ) 】
3. 參數(shù)名稱是不重要的,你可以聲明為其它的名字,比如 【 int main( int a, char *b[] ) 】 都是可以的。
4. 指針數(shù)組argv的第 1 個元素,即argv[0],是程序名,也就是你的可執(zhí)行文件的名字。
5. 如果你輸入的參數(shù)中有空格,應(yīng)該使用雙引號括起來。
實(shí)現(xiàn)一個類似echo命令的程序:將所有參數(shù)打印出來。文件名為:my_echo.c
執(zhí)行結(jié)果:(默認(rèn)得到的可執(zhí)行文件為my_echo.ext,在執(zhí)行函數(shù)時,傳遞參數(shù)為hello world, hello C!)。如果在命令行中打開,使用my_echo.exe hello world, hello C!
分析:只需要弄清楚指針數(shù)組的內(nèi)部結(jié)構(gòu),畫了張圖,見下面。
本文鏈接:http://blog.csdn.net/daheiantian/archive/2011/02/13/6246519.aspx