我们可以在getopt_long函数中将dynamic array data()用作longopts参数吗? 我试图创建一个C++解析类,它将使用 GETOPTTYLUG/函数。 因此,基本上我希望可以动态创建longopts参数
这段代码表明,对我们可以在getopt_long函数中将dynamic array data()用作longopts参数吗? 我试图创建一个C++解析类,它将使用 GETOPTTYLUG/函数。 因此,基本上我希望可以动态创建longopts参数,c++,getopt-long,C++,Getopt Long,这段代码表明,对longopts参数使用静态数组将起作用: int main(int argc, char **argv) { while (true) { static struct option long_options_static[] = { {"a", required_argument, 0, 'a'}, {"b", required_argument, 0, 'b'}, }; int opt
longopts
参数使用静态数组将起作用:
int main(int argc, char **argv) {
while (true) {
static struct option long_options_static[] = {
{"a", required_argument, 0, 'a'},
{"b", required_argument, 0, 'b'},
};
int option_index = 0;
char c = getopt_long(argc, argv, "", long_options_static, &option_index);
}
return 0;
}
但是,使用std::vector
将进行编译,但不会按预期工作:
int main(int argc, char **argv) {
while (true) {
std::vector<struct option> long_options_vect(2);
long_options_vec[0] = {"a", required_argument, 0, 'a'};
long_options_vec[1] = {"b", required_argument, 0, 'b'};
int option_index = 0;
char c = getopt_long(argc, argv, "", long_options_vect.data(), &option_index);
}
return 0;
}
int main(int argc,char**argv){
while(true){
std::向量长向量选项向量(2);
long_options_vec[0]={“a”,必需的_参数,0,'a'};
long_options_vec[1]={“b”,必需的_参数,0,'b'};
int option_index=0;
char c=getopt_long(argc,argv,“,long_options_vect.data(),&option_index);
}
返回0;
}
从getopt_long
中,它只说明
longopts是指向结构选项数组的第一个元素的指针
所以从理论上讲,使用任何类型的容器,比如std::vector或std::array,然后传递存储器的指针都是可能的,对吗?
但是我得到了无法识别的选项错误,我是否遗漏了什么?数组需要包含一个特殊的哨兵值以指示其结束。否则,
getopt_long
无法知道数组中有多少个元素。从链接的手册页:
数组的最后一个元素必须用零填充
数组不需要包含一个特殊的sentinel值来指示其结束吗?否则,
getopt_long
无法知道数组中有多少个元素。从链接的手册页:数组的最后一个元素必须用零填充。我知道了,我错过了那个元素。现在它开始工作了。谢谢你的回答:)