複数のコマンド ライン引数を受け取るプログラムがあるため、getopt を使用しています。私の引数の 1 つは、文字列をパラメーターとして受け取ります。とにかく getopt 関数を介してその文字列を取得する方法はありますか、または argv[] 配列を介して取得する必要がありますか? また、 getopt は次のような引数を読み取ることができ-file
ますか? 私がこれまで見てきたすべての議論には、次のような1つの文字しかありません-a
編集
以下の回答から、getopt_long() を使用するプログラムを作成しましたが、switch ステートメントは、長い引数ではなく文字引数を使用する場合にのみ引数を認識します。なぜこれが起こっているのかわかりません。引数-mf -file sample
を渡すと、印刷ステートメントが表示されません。
編集
コマンド引数を as として入力してみましたが、--file
うまくいきました。だけでこれを行うことはできません-file
か?
static struct option long_options[] =
{
{"mf", required_argument, NULL, 'a'},
{"md", required_argument, NULL, 'b'},
{"mn", required_argument, NULL, 'c'},
{"mw", required_argument, NULL, 'd'},
{"lf", required_argument, NULL, 'e'},
{"ld", required_argument, NULL, 'f'},
{"ln", required_argument, NULL, 'g'},
{"lw", required_argument, NULL, 'h'},
{"rf", required_argument, NULL, 'i'},
{"rd", required_argument, NULL, 'j'},
{"rn", required_argument, NULL, 'k'},
{"rw", required_argument, NULL, 'l'},
{"df", required_argument, NULL, 'm'},
{"dd", required_argument, NULL, 'n'},
{"dn", required_argument, NULL, 'o'},
{"dw", required_argument, NULL, 'p'},
{"file", required_argument, NULL, 'q'},
{NULL, 0, NULL, 0}
};
int ch=0;
while ((ch = getopt_long(argc, argv, "abcdefghijklmnopq:", long_options, NULL)) != -1)
{
// check to see if a single character or long option came through
switch (ch){
case 'a':
cout<<"title";
break;
case 'b':
break;
case 'c':
break;
case 'd':
break;
case 'e':
break;
case 'f':
break;
case 'g':
break;
case 'h':
break;
case 'i':
break;
case 'j':
break;
case 'k':
break;
case 'l':
break;
case 'm':
break;
case 'n':
break;
case 'o':
break;
case 'p':
break;
case 'q':
cout<<"file";
break;
case '?':
cout<<"wrong message"
break;
}
}