帶參數的main函數

 int argc,char *argv
agrc表示參數的個數
argv儲存參數

這個函數的意思是逐一輸出參數


實際上,main函數也可以帶參數。帶參數main函數的定義格式如下:
void main(int argc, char *argv[])
{
... ...
}
argc和argv是main函數的形式參數。這兩個形式參數的類型是系統規定的。如果main函數要帶參數,就是這兩個類型的參數;否則main函數就沒有參數。變量名稱argc和argv是常規的名稱,當然也可以換成其他名稱。
那麼,實際參數是如何傳遞給main函數的argc和argv的呢?我們知道,C程序在編譯和鏈接後,都生成一個exe文件,執行該exe文件時,可以直接執行;也可以在命令行下帶參數執行,命令行執行的形式爲:
可執行文件名稱 參數1 參數2 ... ... 參數n
可執行文件名稱和參數、參數之間均使用空格隔開。例如,我們在DOS下運行copy c:\test.txt d:\test.txt,可執行文件名稱爲copy,參數1爲字符串“c:\test.txt”,參數2爲“d:\test.txt”。結果copy命令將c:\test.txt拷貝到d盤,目標文件取爲test.txt。
如果按照這種方法執行,命令行字符串將作爲實際參數傳遞給main函數。具體爲:
(1) 可執行文件名稱和所有參數的個數之和傳遞給argc;
(2) 可執行文件名稱(包括路徑名稱)作爲一個字符串,首地址被賦給argv[0],參數1也作爲一個字符串,首地址被賦給argv[1],... ...依次類推。
例如,現在運行命令行(test是編譯後的exe文件名稱):
C:\TC\test how are you
那麼test工程的main函數參數argc=4;
argv[0]將保存字符串"C:\TC\test"的首地址;
argv[1]將保存字符串"how"的首地址;
argv[2]將保存字符串"are"的首地址;
argv[3]將保存字符串"you"的首地址;
下面的例子打印所有的argv參數:
main(int argc, char *argv[])
{
int i;
printf("\nTotal %d arguments",argc);
for(i=0;i<argc;i++)
{
printf("\nArgument %d = %s ",i+1, argv[i]);
}
}
如果編譯後的exe文件名稱爲test,在DOS下運行C:\TC\test how are you,結果輸出:
Total 4 arguments
Argument 1 = C:\TC\test.exe
Argument 2 = how
Argument 3 = are
Argument 4 = you
我們也可以在調試狀態下輸入命令行參數,方法是:
在TurboC的Options菜單下有一個子菜單Arguments,選擇該項並確定,彈出輸入窗口;在輸入窗口鍵入命令行參數即可。比如要調試上述的test,可以在輸入窗口鍵入how are you。在調試過程中,可執行文件名稱和參數字符串將被傳遞給main函數的形式參數。
在DOS系統下,人們常常希望在運行exe的同時,傳遞一些有用的信息。例如copy.exe,運行時將源文件名稱和目的文件名稱作爲參數傳入。利用指針數組argv作爲main函數的形式參數,可以滿足這種需要。

 

轉載於:http://liuzhen0107.blog.163.com/blog/static/22458352201071304914403/

發佈了13 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章