命令列引數
17.1 短命令列引數
函式getopt()用來分析命令列引數,其函式原型和相關變數宣告如下:
#include
int getopt(int argc, char * const argv, const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
optind: 初始化值為1,下一次呼叫getopt時,從optind儲存的位置重新開始檢查選項,也就是從下乙個'-'的選項 開始。
opterr: 初始化值為1,當opterr=0時,getopt不向stderr輸出錯誤資訊。
optopt: 當命令列選項字元不包括在optstring中或者選項缺少必要的引數時,該選項儲存在optopt中,getopt返 回』?』。
optarg和optind是兩個最重要的external變數。optarg是指向引數的指標(當然這隻針 對有引數的選項); optind是argv陣列的索引,眾所周知,argv[0]是函式名稱,所有引數從 argv[1]開始,所以optind被初始化設定指為1每呼叫一次getopt()函式, 返回乙個選項,如果 該選項有引數,則optarg指向該引數。 在命令列選項引數再也檢查不到optstring中包含的 選項時,返回-1。
函式getopt()有三個引數,argc和argv應該不需要多說,下面說一下字串optstring, 它是作為選項的字串的列表。
函式getopt()認為optstring中,以』-』開頭的字元.optstring中的格式規範如下: 1.單個字元,表示選項. 2.單個字元後接乙個冒號』:』,表示該選項後必須跟乙個引數值。引數緊跟在選項後或
者以空格隔開。該引數的指標賦給optarg。 3.單個字元後跟兩個冒號』:』,表示該選項後必須跟乙個引數。 引數必須緊跟在選項後不能以空格隔開。該引數的指標賦給optarg。(這個特性是gnu的
擴充套件)。 示例:
214 第17章
命令列引數
#include
#include
#include
void display_usage(void)
int main(int argc, char *argv) }
printf("flag = %d\tnum=%d\ttime=%d\tdate=%d\n", flag, num, time, date);
return 0;
}17.2 長命令引數
#include
int getopt_long(int argc, char * const argv, const char *optstring, const struct option *longopts, int *longindex);
struct option ;
name 是引數的名稱
示例:
17.2節
長命令引數
215
has_arg 指明是否帶引數值,其數值可選:
no_argument (即 0) 表明這個長引數不帶引數(即不帶數值,如:--name)
required_argument (即 1) 表明這個長引數必須帶引數(即必須帶數值,如:--name itcast) optional_argument(即2)表明這個長引數後面帶的引數是可選的,(即--name和--name itcast均可)
flag 當這個指標為空的時候,函式直接將val的數值從getopt_long的返回值返回出去,當它非空時, val的值會被賦到flag指向的整型數中,而函式返回值為0
val 用於指定函式找到該選項時的返回值,或者當flag非空時指定flag指向的資料的值。
longindex 如果longindex非空,它指向的變數將記錄當前找到引數符合longopts裡的第幾個元素的描述,即是 longopts的下標值。
#include
#include
#include
#include
void display_usage(void)
int main(int argc, char *argv) , , , , , ,
};while ((opt = getopt_long(argc, argv, optstring, longopts, &longindex)) != -1)
if (strcmp("year", longopts[longindex].name) == 0)
case '?':display_usage();exit(0);
default:display_usage();exit(0); }
}printf("flag = %d \tnum= %d \ttime= %d \tdate= %d \tmonth= %d \tyear= %d \n", flag, num, time, date, month, year);
return 0; }
命令列引數
c 程式設計師參考 main方法可以使用引數,在這種情況下它採用下列形式之一 static int main string args static void main string args main方法的引數是表示命令行引數的string陣列。通常通過測試length屬性來檢查引數是否存在,例如 ...
命令列引數
c程式中的mian具有兩個形參。int main int argc,char argv argc 命令列引數的數目 argv 指向一組引數值的第乙個元素 每個元素都是指向乙個引數文字的指標 指標陣列 每個元素都是乙個字元指標,陣列末尾是乙個null指標,argc的值和這個null都用於確定實際傳遞了...
命令列引數
命令列引數,也是一種形式的引數。它與我們常見的函式的引數的不同點在於,他是傳遞命令列的引數。c 中可以指定任意數量的命令列引數存放在args陣列中。args陣列的第乙個元素是執行該程式的.exe檔名。向其中新增命令列引數的方法 開啟專案屬性頁面 解決方案資源管理器中,所在專案的properties選...