1. 程式人生 > >main (int argc,char *argv[ ]) 與 getopt

main (int argc,char *argv[ ]) 與 getopt

main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的標準寫法。 argc: 整數,用來統計你執行程式時送給main函式的命令列引數的個數 * argv[ ]: 字串陣列,用來存放指向你的字串引數的指標陣列,每一個元素指向一個引數 argv[0] 指向程式執行的全路徑名 argv[1] 指向在DOS命令列中執行程式名後的第一個字串 argv[2] 指向執行程式名後的第二個字串 ... argv[argc]為NULL。 **env:字串陣列。env[ ]的每一個元素都包含ENVVAR=value形式的字元 串。其中ENVVAR為環境變數,value 為ENVVAR的對應值。 argc, argv,env是在main( )函式之前被賦值的,編譯器生成的可執行檔案,main( )不是真正的入口點,而是一個標準的函式,這個函式名與具體的作業系統有關。

getopt:int getopt(int argc,char * const argv[ ],const char * optstring);

表頭檔案 #include<unistd.h> 定義函式 int getopt(int argc,char * const argv[ ],const char * optstring); extern char *optarg; extern int optind, opterr, optopt;

getopt() 所設定的全域性變數包括:
optarg——指向當前選項引數(如果有)的指標。
optind——再次呼叫 getopt() 時的下一個 argv 指標的索引。
optopt——最後一個未知選項。


函式說明 getopt()用來分析命令列引數。引數argc和argv是由main()傳遞的引數個數和內容。引數 optstring為選項字串, 告知 getopt()可以處理哪個選項以及哪個選項需要引數:
 如果選項字串裡的字母后接著冒號“ :”,則表示還有相關的引數,全域變數optarg 即會指向此額外引數。如果在處理期間遇到了不符合optstring指定的其他選項getopt()將顯示一個錯誤訊息,並將全域變數optarg設為“?”字元,如果不希望getopt()打印出錯資訊,則只要將全域變數opterr設為0即可。

optstring中的指定的內容的意義(例如getopt(argc, argv, "ab:c:de::");
1、單個字元,表示選項,(如上例中的abcde各為一個選項) 2、單個字元後接一個冒號:表示該選項後必須跟一個引數。引數緊跟在選項後或者以空格隔開。該引數的指標賦給optarg。(如上例中的b:c:) 3、 單個字元後跟兩個冒號,表示該選項後可以跟一個引數,也可以不跟。如果跟一個引數,引數必須緊跟在選項後不能以空格隔開。該引數的指標賦給optarg。(如上例中的e::,如果沒有跟引數,則optarg = NULL)