最近一直在Linux下寫程序,命令行參數一般都是手動寫程序分析處理,特別麻煩而求代碼也很亂。最近發現有getopt()可以幫助進行參數分析,方便了很多。但是發現一個問題,getopt()每個選項只能用optarg獲得一個參數,要是想要獲得兩個以上的參數就沒辦法了。在網上查了以下也沒有什麼特別好的辦法。雖然getopt_long()可以獲得多個參數,但是這個函數需要的參數太多了,不喜歡用。後來看了以下getopt的介紹自己想出了一個辦法,看着還不錯。分享1下,如果你也想到了這種方法,純屬有緣哈。
先粘上getopt的介紹,獲取兩個以上參數的方法寫在後面。
函數說明 getopt()用來分析命令行參數。參數argc和argv分別代表參數個數和內容,跟main()函數的命令行參數是一樣的。參數 optstring爲選項字符串, 告知 getopt()可以處理哪個選項以及哪個選項需要參數,如果選項字符串裏的字母后接着冒號“:”,則表示還有相關的參數,全域變量optarg 即會指向此額外參數。如果在處理期間遇到了不符合optstring指定的其他選項getopt()將顯示一個錯誤消息,並將全域變量optarg設爲“?”字符,如果不希望getopt()打印出錯信息,則只要將全域變量opterr設爲0即可。
#include <stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int ch;char *seg;
while((ch = getopt(argc,argv,"a:"))!= -1)
{
switch(ch)
{
case 'a': seg=optarg; break;
default: printf("unrecongnized option :%c\n",ch);
}
printf("option's seg: +%s\n",seg);
}
return 0;
}
假如我們的程序名叫main,那麼運行一下:main -a aa bb cc
我們可以很容易用oprarg變量得到第一個參數aa,而後面的參數bb cc 甚至dd ee ff怎麼辦呢?
#include <stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int ch;
char *seg1,*seg2,*seg3;
while((ch = getopt(argc,argv,"a:"))!= -1)
{
switch(ch)
{
case 'a':
{
seg1=optarg;
seg2=argv[optind];
seg3=argv[optind+1];
}; break;
default: printf("unrecongnized option :%c\n",ch);
}
printf("option's seg1: +%s\n",seg1);
printf("option's seg2: +%s\n",seg2);
printf("option's seg3: +%s\n",seg3);
} return 0; }
還是運行一下:main -a aa bb cc