開始
int main(int argc, const char * ARGV[])
在學習C語言的時候,大家都是編寫一個程式,然後在終端運行查看結果,輸入數位等等...... 不知道大家有沒有嘗試過讓你編寫的程式能夠像系統命令那樣接受參數呢? 比如說:ls -al這樣子。
如果想的話,就像上文那樣來聲明吧!
其中:
ARGV: 指標的指標
argc: 整數
舉個栗子
假設程式的名稱為test,當只輸入test,則由作業系統傳來的參數為:
argc = 1,表示只有一程式名稱;
argc只有一個元素,ARGV[0]指向輸入的程式路徑及名稱:./ 測試
當輸入test para_1,有一個參數,則由作業系統傳來的參數為:
argc = 2,表示除了程式名外還有一個參數;
ARGV[0]指向輸入的程式路徑及名稱;
ARGV[1]指向參數para_1字串
當輸入test para_1 para_2 有2個參數,則由作業系統傳來的參數為:
argc = 3,表示除了程式名外還有兩個參數;
ARGV[0]指向輸入的程式路徑及名稱;
ARGV[1]指向參數para_1字串;
ARGV[2]指向參數para_2字串;
所以,以此類推~
結合實際栗子來講:
1 |
int main(int argc, const char * argv[]) |
字符* argv的[]: argv是一個指標陣列,元素個數是argc,存放的是指向每一個參數的指標,第一個元素即argv[0]為程式運行的全路徑名,從二個元素(ARGV[1])開始,是每一個參數的名稱,最後一個元素為Null。總的來說,即:
* ARGV: 字串陣列
ARGV[0] 為程式運行的全路徑名
ARGV[1] 為執行程式名後的第一個字串;
ARGV[2] 為執行程式名後的第二個字串;
…
ARGV[argc]為Null。
int argc: 表示argv的大小,是實際參數個數+1,其中+1是因為argv[0]是編譯後的可執行檔名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/*program name EXAMPLE.EXE*/ #i nclude <stdio.h> #i nclude <stdlib.h> main(int argc, char *argv[], char *env[]) { int i; printf( "These are the %d command- line arguments passed to main:\n\n", argc); for( i = 0; i <= argc; i++) printf( "argv[%d]:%s\n", i, argv[i] ); printf( "\nThe environment string(s)on this system are:\n\n"); for( i = 0; env[i] != NULL; i++ ) printf( " env[%d]:%s\n", i, env[i] ); } ./EXAMPLE first "I’m a good boy" c "last " stop //注意: 可以用双引号括起内含空格的参数, 如本例中的: " argument with blanks"和"Last but one")。 //结果是这样的: These are the 6 command-linearguments passed to main: argv[0]:./ EXAMPLE argv[1]:first argv[2]: I’m a good boy argv[3]:c argv[4]: last argv[5]:stop argv[6]:(NULL) |
本文內容參考自這裡。
本文由 落格博客 原創撰寫:落格博客 » c語言中命令行參數argc,ARGV
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/494.html