GetOpt Long 認識到冗長
GetOpt Long recognizing Verbose
现在,我正在尝试让我的程序正确地重新定位我在命令行中传递给它的标志。以下命令行 ./MineEscape --container BINARY infile.txt 工作正常,因为 MineEscape 是可执行文件的名称。 但是,我在让这个命令行工作时遇到了问题,./MineEscape --verbose 15 -c 配对文件.txt>输出文件.txt
另请注意,命令行所需的标志是 --container 和一种容器类型,例如 PAIRING 或 BINARY。以及 --verbose 后跟一个整数。
运行不正确的命令行时,我在详细部分遇到问题,说存在段错误。
int main(int argc,char **argv){
struct arguments{
bool binary;
bool poorMan;
bool sorted;
bool pairing;
int outputStatistics;
} choice;
const struct option longOpts[]{
{"help",optional_argument,NULL,'h'},
{"container",required_argument,NULL,'c'},
{"verbose",optional_argument,NULL,'v'}
};
stringstream ss;
int opt=0,longIndex=0;
opt=getopt_long(argc,argv,"v:c:h",longOpts,&longIndex);
while(opt!=-1){
switch(opt){
case 'h':
//Print out description of executable
exit(0);
break;
case 'c':
if(!strcmp("BINARY",optarg))
choice.binary=1;
else if(!strcmp("POOR_MAN",optarg))
choice.poorMan=1;
else if(!strcmp("SORTED",optarg))
choice.sorted=1;
else if(!strcmp("PAIRING",optarg))
choice.pairing=1;
else{
ss<<"Sorry, not a valid container implementationn";
cout<<ss.str();
exit(0);
}
break;
case 'v':
if(atoi(optarg)>0)
choice.outputStatistics=atoi(optarg);
else{
ss<<"Sorry, requires a value greater than 0n";
cout<<ss.str();
exit(0);
}
break;
default:
break;
}
opt=getopt_long(argc,argv,"v:c:h",longOpts,&longIndex);
}
}
你会发现'optarg'的值为NULL,尽管它被指定为"v:"。
例如,我发现如果使用"-v3"或"-v 3",则可以解析。 但是"--verbose 3"失败,而"--verbose=3"有效。
奇怪的是,这种行为似乎只带有可选参数。
此链接有更多
海湾合作委员会 4.4.6
相关文章:
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 对 '(const Y) (int&, std::mersenne_twister_engine<long unsigned int,
- 从 long 转换C++位集构造函数的复杂性是多少?
- 自动类型默认为 int 而不是 long
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- C++ 我应该如何解释函数参数long(*pPointer)(OtherClass *const, long)?
- 以0开头的值初始化long-long会导致奇怪的值
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- cudaMallocManaged with vector<complex<long double> > C++ - NVIDIA CUDA
- 为什么我的函数返回 long long 返回 705032704?
- C++11 模板函数"implicity"将位集<N>转换为"unsigned long"
- atof coredump with getopt
- 在C++中使用getopt时打印默认参数
- GetOpt Long 認識到冗長