C語言的命令行參數(轉載學習)

 命令行參數的最大作用就是讓我們可以在程序之外控制程序,例如linux或者dos中我們經常使用的命令,從本質上將是一個程序;而我們使用的參數,就是該命令(對應的程序)的命令行參數。

         正是由於命令行的這麼重要的作用,所以它成爲各種編程語言不可缺少的功能,只是實現細節上略有不同,但大體上都是一樣的,而且都比較簡單。

1. 先想一想

1.1 程序中在哪裏接收命令行參數(where)

         命令行參數,顧名思義,就是在命令行調用程序時傳遞的參數,那麼誰來接收呢,一定是main函數了,因爲程序是從main函數開始執行的啊。那作爲一個函數,main怎麼接收參數呢,很明顯,用參數接收是最簡單的方式。

1.2 程序中怎樣接收去接收參數(how)

        想一下現在linux或者dos命令中使用參數的形式,你是否能想到一個比現在的方式更簡單的方式:【命令 選項 參數】。我是想不出來了,那麼針對這種方式,如何來接收呢。其實也很簡單,因爲它們使用空格分開的,所以我們只要將它們作爲字符串依次存在一個數組就行了,也就是使用一個指針數組,每個元素是一個字符指針。對於數組我們經常使用的一個特性就是數組的長度,爲了防止每次都自己編寫代碼求長度(實際上是重複勞動,因爲求一個指針數組的長度代碼是固定的),所以顯式的提供給我們這個長度是比較好的。

2. 如何使用

        將main函數的聲明爲如下形式:

  1. int main( int argc, char *argv[]){  
  2.   
  3. /* 這裏省略了函數體內容 */  
  4.   
  5. }  

      注意事項:

        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

  1. #include <stdio.h>   
  2. #include <stdlib.h>   
  3.   
  4. /* 實現類似echo的輸出一行 */   
  5.   
  6. #define BUFFER_SIZE 100  
  7.   
  8. void function( FILE *input );  
  9.   
  10. int main( int argc, char *argv[]){  
  11.     printf("argc == %d  /n", argc);   
  12.       
  13.     char ** temp = argv;  /* 保留argv */  
  14.     while( *++temp != NULL ){  
  15.         printf("%s ", *temp);  
  16.     }   
  17.     printf("/n");  
  18.       
  19.     system("pause");  
  20.     return EXIT_SUCCESS;  
  21. }  

執行結果:(默認得到的可執行文件爲my_echo.ext,在執行函數時,傳遞參數爲hello world, hello C!)。如果在命令行中打開,使用my_echo.exe hello world, hello C!

  1. argc == 5  
  2. hello world, hello C!  

分析:只需要弄清楚指針數組的內部結構,畫了張圖,見下面。

csdn_命令行參數演示圖

原文鏈接地址:http://blog.csdn.net/daheiantian/archive/2011/02/13/6246519.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章