main(int argc, char *argv[])就是為了讓程序里面能使用參數(shù),argc是argument count的縮寫,表示參數(shù)的個(gè)數(shù),argv是argument value的縮寫,表示參數(shù)的值。
在以前的例子中,main函數(shù)的形式參數(shù)列表都是空的。實(shí)際上,main函數(shù)也可以帶參數(shù)。帶參數(shù)main函數(shù)的定義格式如下:void main(int argc, char *argv[]){... ...}argc和argv是main函數(shù)的形式參數(shù)。這兩個(gè)形式參數(shù)的類型是系統(tǒng)規(guī)定的。如果main函數(shù)要帶參數(shù),就是這兩個(gè)類型的參數(shù);否則main函數(shù)就沒有參數(shù)。變量名稱argc和argv是常規(guī)的名稱,當(dāng)然也可以換成其他名稱。那么,實(shí)際參數(shù)是如何傳遞給main函數(shù)的argc和argv的呢?我們知道,C程序在編譯和鏈接后,都生成一個(gè)exe文件,執(zhí)行該exe文件時(shí),可以直接執(zhí)行;也可以在命令行下帶參數(shù)執(zhí)行,命令行執(zhí)行的形式為:可執(zhí)行文件名稱 參數(shù)1 參數(shù)2 ... ... 參數(shù)n可執(zhí)行文件名稱和參數(shù)、參數(shù)之間均使用空格隔開。例如,我們?cè)贒OS下運(yùn)行copy c:\test.txt d:\test.txt,可執(zhí)行文件名稱為copy,參數(shù)1為字符串“c:\test.txt”,參數(shù)2為“d:\test.txt”。結(jié)果copy命令將c:\test.txt拷貝到d盤,目標(biāo)文件取為test.txt。如果按照這種方法執(zhí)行,命令行字符串將作為實(shí)際參數(shù)傳遞給main函數(shù)。具體為:(1) 可執(zhí)行文件名稱和所有參數(shù)的個(gè)數(shù)之和傳遞給argc;(2) 可執(zhí)行文件名稱(包括路徑名稱)作為一個(gè)字符串,首地址被賦給argv[0],參數(shù)1也作為一個(gè)字符串,首地址被賦給argv[1],... ...依次類推。例如,現(xiàn)在運(yùn)行命令行(test是編譯后的exe文件名稱):C:\TC\test how are you那么test工程的main函數(shù)參數(shù)argc=4;argv[0]將保存字符串"C:\TC\test"的首地址;argv[1]將保存字符串"how"的首地址;argv[2]將保存字符串"are"的首地址;argv[3]將保存字符串"you"的首地址;下面的例子打印所有的argv參數(shù):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下運(yùn)行C:\TC\test how are you,結(jié)果輸出:Total 4 argumentsArgument 1 = C:\TC\test.exeArgument 2 = howArgument 3 = areArgument 4 = you我們也可以在調(diào)試狀態(tài)下輸入命令行參數(shù),方法是:在TurboC的Options菜單下有一個(gè)子菜單Arguments,選擇該項(xiàng)并確定,彈出輸入窗口;在輸入窗口鍵入命令行參數(shù)即可。比如要調(diào)試上述的test,可以在輸入窗口鍵入how are you。在調(diào)試過程中,可執(zhí)行文件名稱和參數(shù)字符串將被傳遞給main函數(shù)的形式參數(shù)。在DOS系統(tǒng)下,人們常常希望在運(yùn)行exe的同時(shí),傳遞一些有用的信息。例如copy.exe,運(yùn)行時(shí)將源文件名稱和目的文件名稱作為參數(shù)傳入。利用指針數(shù)組argv作為main函數(shù)的形式參數(shù),可以滿足這種需要。
posted on 2012-03-28 17:08
憤怒的考拉 閱讀(144)
評(píng)論(0) 編輯 收藏