我可能只是让我对下面的代码视而不见,但我无法让getopt_long传递参数“maska”,即ARG_MASK0。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>
typedef char Char;
typedef int Int;
typedef unsigned char UInt8;
enum eArgs {
ARG_MOTION=258, //258
ARG_MASK0, //259
ARG_MASK1, //260
ARG_NO_TTY //261
};
void main(Int argc, Char *argv[])
{
const Char shortOptions[] = "h";
const struct option longOptions[] = {
{"motion", required_argument, NULL, ARG_MOTION},
{"maska", required_argument, NULL, ARG_MASK0},
{"maskb", required_argument, NULL, ARG_MASK1},
{"notty", no_argument, NULL, ARG_NO_TTY},
{"help", no_argument, NULL, 'h'},
{0, 0, 0, 0}
};
Char *end;
Int index;
Int c,i;
UInt8 mask[10];
fprintf(stderr, "argc=%i\n", argc);
for(i=1; i < argc; i++) {
fprintf(stderr, "argv[%i]=%s\n", i,argv[i]);
}
for (;;) {
c = getopt_long(argc, argv, shortOptions, longOptions, &index);
fprintf(stderr,"c=%i\n", c);
if (c == -1) {
break;
}
}
}
我在Ubuntu上编译代码为:
gcc test_parseargs.c -o main
并按以下方式运行:
./main --motion --maska=0 --maskb=1 --notty
获取输出:
argc=5
argv[1]=--motion
argv[2]=--maska=0
argv[3]=--maskb=1
argv[4]=--notty
c=258
c=260
c=261
c=-1
我的代码出了什么问题?
答案 0 :(得分:2)
你的论点存在问题
{"motion", required_argument, NULL, ARG_MOTION}, //code
./main --motion --maska=0 --maskb=1 --notty
缺少运动的论据。请尝试以下。
./main --motion=1 --maska=0 --maskb=1 --notty
在上一次运行中, - maska = 0被视为运动的参数
答案 1 :(得分:2)
代码是正确的。
您没有向--motion
提供参数。因此,--maska=0
用作--motion
的参数,其余参数正确显示为
c=260
c=261