0
以下のCコードは正常に動作しますが、ユーザがオプション-dを渡したかどうかを知るにはどうすればいいですか?私は、ユーザーが-dオプションOPTARG使用している場合にのみ特定のoptargオプションがcで渡されているかどうかを知る方法
Eg : ./application -d
のみ、このコードが動作することを知ることができるコードの下から
!
ユーザーが
./application -a
を入力した場合、オプション-dが渡されているかどうか、私はそれを知ることはできません。
また-aが複数の値を取る必要がありますが、コード以下のオプションは、単一の値を
eg : ./application -a knn , lr , ln
がどのように私はこのコードは同じオプションに複数の値を受け入れることができます動作しますか?コードの下
は、単一の値のために正常に動作します
eg : ./application -a knn
int main(int argc, char *argv[]) {
int opt= 0;
int start = -1, end = -1;
char *alg,*dir,*graph;
//Specifying the expected options
//The two options s and e expect numbers as argument
static struct option long_options[] = {
{"start",no_argument,0,'s' },
{"end",no_argument,0,'e' },
{"algorithm",no_argument, 0,'a' },
{"directory",required_argument, 0,'d' },
{"graph",required_argument,0,'g' },
{0,0,0,0}
};
int long_index =0;
int i=0,j=0;
size_t size = 1;
while ((opt = getopt_long(argc, argv,"s:e:a:d:h:g:",
long_options, &long_index)) != -1) {
switch (opt) {
case 'd' :
dir = optarg;
if (optarg == NULL)
printf("d option is must");
else
{
printf("option -d value is must\n");
usage();
exit(EXIT_FAILURE);
}
break;
case '?':
if (optopt == ('d' || 'a' || 'g' || 's' || 'e'))
fprintf (stderr, "Option -%c reqd", optopt);
usage();
exit(EXIT_FAILURE);
case 'a' :
alg = optarg;
if(alg == "lr" || alg == "knn" || alg == "cart")
{
printf("you entered option -a \"%s\"\n",optarg);
}
else
{
printf("Wrong option -a value is passed\n");
:
:
:
(0 == strnlen(ARGV [i]は、 "-d"、2))であれば説明することができますすることができます文字列をcharへのポインタのリストでありますコード行? – programmer
@programmer 'strlen()'のmanページは非常に良い説明ですが、簡単にするために、 'argv [i]'が指すchar配列の最初の2バイトを文字列 "-d"と比較してください。一致した場合、 'if()'の本文が入力されます – user3629249