命令行參數的最大作用就是讓我們可以在程序之外控制程序,例如linux或者dos中我們經常使用的命令,從本質上將是一個程序;而我們使用的參數,就是該命令(對應的程序)的命令行參數。
正是由於命令行的這麼重要的作用,所以它成爲各種編程語言不可缺少的功能,只是實現細節上略有不同,但大體上都是一樣的,而且都比較簡單。
1. 先想一想
1.1 程序中在哪裏接收命令行參數(where)
命令行參數,顧名思義,就是在命令行調用程序時傳遞的參數,那麼誰來接收呢,一定是main函數了,因爲程序是從main函數開始執行的啊。那作爲一個函數,main怎麼接收參數呢,很明顯,用參數接收是最簡單的方式。
1.2 程序中怎樣接收去接收參數(how)
想一下現在linux或者dos命令中使用參數的形式,你是否能想到一個比現在的方式更簡單的方式:【命令 選項 參數】。我是想不出來了,那麼針對這種方式,如何來接收呢。其實也很簡單,因爲它們使用空格分開的,所以我們只要將它們作爲字符串依次存在一個數組裏就行了,也就是使用一個指針數組,每個元素是一個字符指針。對於數組我們經常使用的一個特性就是數組的長度,爲了防止每次都自己編寫代碼求長度(實際上是重複勞動,因爲求一個指針數組的長度代碼是固定的),所以顯式的提供給我們這個長度是比較好的。
2. 如何使用
將main函數的聲明爲如下形式:
- int main( int argc, char *argv[]){
- /* 這裏省略了函數體內容 */
- }
注意事項:
1. argv是一個指針數組,要明白它的存數格式。它的每個元素都是一個字符指針,數組的末尾是一個NULL指針。
2. 也是由於argv是一個指針數組,它指向數組的第一個元素(是一個字符指針),所以argv是一個指向字符指針的指針,所以可以將其聲明爲char **argv。即聲明爲:【 int main( int argc, char **argv ) 】
3. 參數名稱是不重要的,你可以聲明爲其它的名字,比如 【 int main( int a, char *b[] ) 】 都是可以的。
4. 指針數組argv的第 1 個元素,即argv[0],是程序名,也就是你的可執行文件的名字。
5. 如果你輸入的參數中有空格,應該使用雙引號括起來。
3.使用舉例
實現一個類似echo命令的程序:將所有參數打印出來。文件名爲:my_echo.c
- #include <stdio.h>
- #include <stdlib.h>
- /* 實現類似echo的輸出一行 */
- #define BUFFER_SIZE 100
- void function( FILE *input );
- int main( int argc, char *argv[]){
- printf("argc == %d /n", argc);
- char ** temp = argv; /* 保留argv */
- while( *++temp != NULL ){
- printf("%s ", *temp);
- }
- printf("/n");
- system("pause");
- return EXIT_SUCCESS;
- }
執行結果:(默認得到的可執行文件爲my_echo.ext,在執行函數時,傳遞參數爲hello world, hello C!)。如果在命令行中打開,使用my_echo.exe hello world, hello C!
- argc == 5
- hello world, hello C!
分析:只需要弄清楚指針數組的內部結構,畫了張圖,見下面。
原文鏈接地址:http://blog.csdn.net/daheiantian/archive/2011/02/13/6246519.aspx