我們一般寫**的時候都會這樣寫main函式:int main()。所以剛開始我們都以為main函式是沒有引數的,然而事實卻不是這樣子的。首先,我們來看看main函式的原型:
int main(int argc,char* argv,char* envp)
所以main函式是有引數的,而且有三個引數。
第乙個引數:argc是個整型變數,表示命令行引數的個數(含第乙個引數)。
第二個引數:argv是個字元指標陣列,每個元素是乙個字元指標,指向乙個字串。這些字串就是命令列中的每乙個引數(字串)。
第三個引數:envp是字元指標陣列,陣列的每乙個原元素是乙個指向乙個環境變數(字串)的字元指標。
看下段**(linux環境中執行):
#include
int main(int argc,char *argv)
return
0;}
看執行結果1:
這個執行結果只有乙個,因為我們的命令列中只有乙個命令./a.out ,所以argc=1,argv字元指標陣列中儲存了乙個字串(./a.out )。現在我們用同樣的**,在命令列中多輸入幾個字串,執行結果如下:
這個時候argc=6,argv中就有6個元素,所以argv 就像是乙個容器一樣,將我們命令列中敲擊的命令或者選項,按空格為分隔符,乙個乙個的放在argv中,如下圖:
注意
當輸入的命令增多時,argv的結構也慢慢增長,我們將argc和argv叫做命令列引數,所以我們在命令列輸入的選項是通過argv傳入的,argc至少等於1。
#include
#include
int main(int argc,char *argv)
if(strcmp(argv[1],"-hello")==0)//通過在命令列輸入的第乙個選項(即argv[1])的不同來控制輸出結果的不同
else
return
0;}
上段**會根據命令列輸入的選項的不同,輸出的結果也會不同。通過這個**我們可以看出,乙個程式表現出不同的行為是通過它的選項(即命令列的引數)的不同來完成的,而命令列的引數是通過main函式傳入的。
注意:argv陣列的最後乙個元素存放了乙個null指標。
以上段**為例:
下面我們再來看看main函式的第三個引數,envp是字元指標陣列,陣列的每乙個原元素是乙個指向乙個環境變數(字串)的字元指標。環境變數一般是指在作業系統中用來指定作業系統執行環境的一些引數,如:臨時資料夾位置和系統資料夾位置等。
#include
#include
int main(int argc,char *argv,char* envp)
return
0;}
結果顯示的都是環境變數(內容過多,擷取部分)
以上就是我總結的main函式引數的相關知識點,不足的地方還望各路大神多多指點~~~
main函式引數解析
int argc,char ar agrc表示引數的個數 ar 儲存引數 這個函式的意思是逐一輸出引數 實際上,main函式也可以帶引數。帶引數main函式的定義格式如下 void main int argc,char ar argc和ar 是main函式的形式引數。這兩個形式引數的型別是系統規定的...
main函式的引數解析
main函式的引數解析 我們平常寫main函式的時候習慣不帶引數,將其預設為void.但如果我們仔細觀察的話,我們就能發現其實main函式是有引數的。接下來,我們就來了解一下main函式的引數列表。首先main函式的原型為 int main int argc,char argv char envp ...
Linux C程式設計 main函式引數解析
摘自 我們經常用的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main argc,argv 語...