次のコマンド ラインを入力します。
./file -a 1 -b2 -a5 -b 55 -b4
私が得る出力は次のとおりです。
a: 1
argv[1]: -a
b: 2
argv[2]: 1
a: 5
argv[3]: -b2
b: 55
argv[4]: -a5
b: 4
argv[5]: -b
Counter: 5
取得したい出力は次のとおりです。
a: 1
argv[1]: -a 1
b: 2
argv[2]: -b2
a: 5
argv[3]: -a5
b: 55
argv[4]: -b 55
b: 4
argv[5]: -b4
Counter: 5
スペースを含む引数は、現在 2 つの引数としてカウントされます。プログラムでそれを 1 つの引数としてのみカウントするようにしたい (「-a」と「1」を別々にではなく、「-a 1」と見なしたい)。
これは私が使用するソースコードで、出力が得られます:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
int main(int argc, char *argv[])
{
int opt = 0;
int quantum1 = 0, quantum2 = 0;
int counter = 0;
while ((opt = getopt(argc, argv,"a:b:")) != -1)
{
switch (opt)
{
case 'a' :
quantum1 = atoi(optarg);
printf("a: %d\n", quantum1);
break;
case 'b' :
quantum2 = atoi(optarg);
printf("b: %d\n", quantum2);
break;
default:
printf("Error\n");
return 1;
break;
}
counter++;
printf("argv[%d]: %s\n", counter, argv[counter]);
}
printf("Counter: %d\n", counter);
return 0;
}
注:引用符は機能を示唆していますが、引用符やその他の記号を使用することは許可されていません。