我正在编写一个程序,该程序可通过目录递归,但是遇到了我的代码一个奇怪的问题。我使用以下代码编译并运行代码:
./sorter -c food -d thisdir -o thatdir
以下给出的参数总数为7。但是,当我尝试检查输入内容时,会得到意外的结果:
int main(int argc, char ** argv){
int checkInputs = checkFlags(argc,argv);
if(checkInputs == 1){
fileSearch(".");
}
else if(checkInputs == 2){
printf("arg counts %d\n",argc);
printf("%s\n",argv[4]);
fileSearch(argv[4]);
}
else if(checkInputs == 3){
printf("arg counts %d\n",argc);
printf("%s\n",argv[4]);
fileSearch(argv[4]);
}
return 0;
}
当checkInputs为2时,它返回预期的输出,但是当它为3时,我在打印argv [4]时得到以下结果:
-d
以下是我的checkInputs函数,可能是导致此问题的原因:
int checkFlags(int argc, char * argv[]) {
int output;
if(argc < 3){
printf("Not enough arguments\n");
output = 0;
return output;
}
else{
int options;
char * input = NULL;
while((options = getopt(argc,argv,"c:d::o::")) != -1){
switch(options) {
case 'c':
input = optarg;
//printf("Mandatory flag: %s\n",optarg);
output = 1;
break;
case 'd':
//printf("We have an optional %s\n",argv[4]);
output = 2;
break;
case 'o':
//printf("We have two optionals: -d: %s & -o: %s\n",argv[4],argv[6]);
output = 3;
break;
/* Probably don't need this case statement*/
case '?':
if(optopt == 'c'){
printf("Unknown option, -%c not present\n",optopt);
exit(0);
}
break;
}
}
}
return output;
}
但是,如果仅使用前2个标志编译程序,则一切正常。
答案 0 :(得分:0)
通过调试代码,当checkInputs == 2
和./program -c hello -d
时,我实际上遇到了分段错误。您应该通过添加IF并检查是否为选项-d
提供路径来解决此问题。还请记住,参数的顺序可以不同。您可以将其他选项保存在变量中,以从checkFlags函数中访问它们。
执行./program -c food -d thisdir -o thatdir
输出:
Mandatory flag: food
We have an optional thisdir
We have two optionals: -d: thisdir & -o: thatdir
arg counts 7
-o
它打印预期的。