Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在getopt_long函数中将dynamic array data()用作longopts参数吗? 我试图创建一个C++解析类,它将使用 GETOPTTYLUG/函数。 因此,基本上我希望可以动态创建longopts参数_C++_Getopt Long - Fatal编程技术网

我们可以在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
无法知道数组中有多少个元素。从链接的手册页:数组的最后一个元素必须用零填充。我知道了,我错过了那个元素。现在它开始工作了。谢谢你的回答:)