C語言 - 第二十三章 | 指標 - 命令列引數
程式在執行時,可以附加一些引數以指定執行不同的功能。
1 | copy -r ./temp ./tmp |
其中copy
是程式名稱,而-r
、./temp
、./tmp
都是在程式執行時附加給程式的一些引數,這種程式執行方式在以文字畫面為主的程式中相當常見,稱為命令列引數(Command-line argument
)。
在之前的程式中,main()
函式在括號中總是void
,而如要使用命令列引數,可以在括號中如下填寫。
1 | int main(int argc, char *argv[]) { |
參數argc
是一個整數,它記錄命令列引數的個數,這個數目包括了程式名稱,例如下面的執行指令,argc
將記錄為5
。
1 | app hello.c -o -c project.p |
每個引數之間以空白作區隔,上面的命令包括程式名稱共會有五個引數,即app
、hello.c
、-o
、-c
、project.p
,這五個引數分別儲存在使用指標的字串陣列之中,即char *argv[]
中。
程式在執行後,argc
的值一定會大於1
,因為至少包括了程式名稱,而argv
則分別儲存了引數的字串。
argv[0]
是"app"
argv[1]
是"hello.c"
argv[2]
是"-o"
argv[3]
是"-c"
argv[4]
是"project.p"
在命令列引數的使用中,如果你的輸入是一個包括空白的字串,則使用""
來包括。
1 | show "This is a string!" |
如此argv[0]
是程式名稱"show"
,而argv[1]
的字串就會是"This is a string!"
。
接下來介紹一些處理命令列引數的技巧,由於命令列引數是儲存在陣列中,取出這些引數的最好方式當然就是使用for
迴圈,而會通常使用一個前導字元,例如'-'
來指定引數的選項功能,由於argv
是個字元陣列,自然地可以使用switch
來比對前導字元。
1 | for(int i = 1; i < argc; i++) { |
在判斷執行選項的case中,你可以進一步檢查第二個字元。
1 | switch(arg[1]) { |
以上是命令列引數處理時的大致流程,當然不同的程式會有不同的處理方式,不過大致上不離以上的架構。
註:以上參考了
命令列引數