日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中使用库函数解析命令行参数

發(fā)布時間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中使用库函数解析命令行参数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在編寫需要命令行參數(shù)的C程序的時候,往往我們需要先解析命令行參數(shù),然后根據(jù)這些參數(shù)來啟動我們的程序。

C的庫函數(shù)中提供了兩個函數(shù)可以用來幫助我們解析命令行參數(shù):getopt、getopt_long。

getopt可以解析短參數(shù),所謂短參數(shù)就是指選項前只有一個“-”(如-t),而getopt_long則支持短參數(shù)跟長參數(shù)(如"--prefix")。

?

getopt函數(shù)

#include<unistd.h> int getopt(int argc,char * const argv[],const char *optstring);
extern char *optarg; //當(dāng)前選項參數(shù)字串(如果有) extern int optind; //argv的當(dāng)前索引值

各參數(shù)的意義:

argc:通常為main函數(shù)中的argc

argv:通常為main函數(shù)中的argv

optstring:用來指定選項的內(nèi)容(如:"ab:c"),它由多個部分組成,表示的意義分別為:

1.單個字符,表示選項。

2 單個字符后接一個冒號:表示該選項后必須跟一個參數(shù)。參數(shù)緊跟在選項后或者以空格隔開。該參數(shù)的指針賦給optarg。

3 單個字符后跟兩個冒號,表示該選項后可以跟一個參數(shù),也可以不跟。如果跟一個參數(shù),參數(shù)必須緊跟在選項后不能以空格隔開。該參數(shù)的指針賦給optarg。

?

調(diào)用該函數(shù)將返回解析到的當(dāng)前選項,該選項的參數(shù)將賦給optarg,如果該選項沒有參數(shù),則optarg為NULL。下面將演示該函數(shù)的用法

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 5 int main(int argc,char *argv[]) 6 { 7 int opt=0; 8 int a=0; 9 int b=0; 10 char s[50]; 11 while((opt=getopt(argc,argv,"ab:"))!=-1) 12 { 13 switch(opt) 14 { 15 case 'a':a=1;break; 16 case 'b':b=1;strcpy(s,optarg);break; 17 } 18 } 19 if(a) 20 printf("option a\n"); 21 if(b) 22 printf("option b:%s\n",s); 23 return 0; 24 } View Code

編譯之后可以如下調(diào)用該程序

?

getopt_long函數(shù)

與getopt不同的是,getopt_long還支持長參數(shù)。

#include <getopt.h> int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int *longindex);

前面三個參數(shù)跟getopt函數(shù)一樣(解析到短參數(shù)時返回值跟getopt一樣),而長參數(shù)的解析則與longopts參數(shù)相關(guān),該參數(shù)使用如下的結(jié)構(gòu)

struct option {//長參數(shù)名const char *name;/*表示參數(shù)的個數(shù)no_argument(或者0),表示該選項后面不跟參數(shù)值required_argument(或者1),表示該選項后面一定跟一個參數(shù)optional_argument(或者2),表示該選項后面的參數(shù)可選*/int has_arg;//如果flag為NULL,則函數(shù)會返回下面val參數(shù)的值,否則返回0,并將val值賦予賦予flag所指向的內(nèi)存int *flag;//配合flag來決定返回值int val; };

參數(shù)longindex,表示當(dāng)前長參數(shù)在longopts中的索引值,如果不需要可以置為NULL。

下面是使用該函數(shù)的一個例子

1 #include <stdio.h> 2 #include <string.h> 3 #include <getopt.h> 4 5 int learn=0; 6 static const struct option long_option[]={ 7 {"name",required_argument,NULL,'n'}, 8 {"learn",no_argument,&learn,1}, 9 {NULL,0,NULL,0} 10 }; 11 12 int main(int argc,char *argv[]) 13 { 14 int opt=0; 15 while((opt=getopt_long(argc,argv,"n:l",long_option,NULL))!=-1) 16 { 17 switch(opt) 18 { 19 case 0:break; 20 case 'n':printf("name:%s ",optarg); 21 } 22 } 23 if(learn) 24 printf("learning\n"); 25 } View Code

編譯之后可以如下調(diào)用該程序

轉(zhuǎn)載于:https://www.cnblogs.com/runnyu/p/4943704.html

總結(jié)

以上是生活随笔為你收集整理的C语言中使用库函数解析命令行参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。