C言語でライブラリ関数getoptを使用してコマンドラインパラメータを解析する方法について

2972 ワード

著作権は作者の所有であり、いかなる形式の転載も作者に連絡して授権を得て出典を明記してください.
短いパラメータを解析できます.短いパラメータとは、オプションの前に「-」が1つしかない場合を指します.
getopt関数
#include
int getopt(int argc,char * const argv[],const char *optstring);

extern char *optarg;   //        
extern int optind;     //argv      (       )

各パラメータの意味:
argc:通常main関数のargc argv:通常main関数のargv optstring:オプションを指定する内容(「ab:c」)で、複数の部分から構成され、それぞれ次の意味を表します.
  • 単一文字で、オプションを表します.
  • 単一文字の後にコロンを付けます.このオプションの後にパラメータを付ける必要があることを示します.パラメータは、オプションの直後にあるか、スペースで区切られています.このパラメータのポインタはoptargに割り当てられます.
  • 単一文字の後に2つのコロンが付いています.このオプションの後に1つのパラメータを付けてもいいし、付いていなくてもいいことを示しています.パラメータが付いている場合は、オプションの直後にパラメータをスペースで区切ることはできません.このパラメータのポインタはoptargに割り当てられます.

  • この関数を呼び出すと、解析された現在のオプションが返されます.このオプションのパラメータはoptargに割り当てられます.このオプションにパラメータがない場合、optargはNULLになります.
    一、getopt関数の一般的な使用
    新しいファイルc、ファイルに以下の内容を入力します.
    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[]) {
        int opt = 0;
        while ((opt = getopt(argc, argv, "ab:c::")) != -1) {
            switch (opt) {
                case 'a':
                    printf("option a: %s
    ", optarg); // optarg == NULL break; case 'b': printf("option b: %s
    ", optarg); break; case 'c': printf("option c: %s
    ", optarg); break; } } return 0; }

    次のコマンドを実行してコンパイルします.
    gcc test.c -o test
    

    コマンドを実行し、次の結果を得ます.コマンド1
    ./test -a -b 123
    

    結果1
    option a: (null)
    option b: 123
    

    コマンド2
    ./test -a -b 123 -c
    

    結果2
    option a: (null)
    option b: 123
    option c: (null)
    

    コマンド3
    ./test -a -b 123 -cbubble
    

    結果3
    option a: (null)
    option b: 123
    option c: bubble
    

    二、注意点
    1、getopt関数はコマンドラインの最後のパラメータを解析した後、argvのパラメータの順序が変わります.実行されるファイル名は依然として一番前にあり、次の部分はオプションとそのパラメータで、最後に他のパラメータです.実行するコマンドは
    ./test -a value -b 123 key -cbubble
    

    出力結果は
    option a: (null)
    option b: 123
    option c: bubble
    

    getopt関数を用いてコマンドラインパラメータを解析していない場合、argvの内容は次のようになります.
    argv[0] = "./test"
    argv[1] = "-a"
    argv[2] = "value"
    argv[3] = "-b"
    argv[4] = "123"
    argv[5] = "key"
    argv[6] = "-cbubble"
    

    しかしながら、ここでgetopt関数の影響を受けるため、argvの実際の内容は以下の通りである.
    argv[0] = "./test"
    argv[1] = "-a"
    argv[2] = "-b"
    argv[3] = "123"
    argv[4] = "-cbubble"
    argv[5] = "value"
    argv[6] = "key"
    

    2、上述したwhileループが終了するとargvにおけるパラメータ位置が変化するほか、optind変数は、上述したパラメータ位置が変化するargvのように、オプションでもオプションパラメータでもない最初のパラメータを指し、optindは「value」の位置を指す.