命令列引數

2021-08-19 14:59:31 字數 2447 閱讀 3475

命令列引數

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選...