我正在使用带有:: function的GNU库,因此它应该接受来自命令行-p和-pc的输入。但是当我通过-p时,它会抛出一个分段错误。我必须在没有参数的情况下传递-p,然后从命令行传递参数“c”。我的代码如下。请建议。
int main(int argc, char **argv) {
char op= '\0';
char arg = '\0';
while( (arg = getopt(argc, argv, "p::")) != -1 ){
switch (arg){
case 'p': op = *optarg;
if (op=='c')
flagp = true;
else if (op=='\0')
flago = true;
else
cout<<"Invalid parameter"<<endl;
}
}
}
答案 0 :(得分:0)
当没有选项处理-p时,getopt()将optarg设置为NULL,并且op = * optarg指令导致分段错误。你需要检查optarg不是null。
#include <stdio.h>
#include <getopt.h>
int main(int argc, char **argv) {
int flagp = 0;
int flago = 0;
char op= '\0';
char arg = '\0';
while( (arg = getopt(argc, argv, "p::")) != -1 ){
printf("arg=%c\n", arg);
switch (arg){
case 'p':
if (optarg != NULL)
{
op = *optarg;
if (op=='c')
flagp = 1;
else if (op=='\0')
flago = 1;
else
fprintf(stderr,"Invalid parameter\n");
}
else
{
printf("optarg is NULL\n");
flago = 1;
}
}
}
printf("ending...\n");
printf("flagp=%d\nflago=%d\n", flagp, flago);
return 0;
}
输出:
>small -p -pc
arg=p
optarg is NULL
arg=p
ending...
flagp=1
flago=1