我用simgrid库创建了一个动态数组:

xbt_dynar_t dynar = xbt_dynar_new(sizeof(char[20]), NULL);

我给它添加了字符串:
char *string = "String";
xbt_dynar_push(dynar, string);

没关系,dynar包含这些字符串的值。
我想创建一个dynamic array的动态数组。我使用:
xbt_dynar_t dynar_dynar = xbt_dynar_new(sizeof(xbt_dynar_t), NULL);

然后我将这个dynar添加到dynar_dynar
xbt_dynar_push(dynar_dynar, dynar);
xbt_dynar_push(dynar_dynar, &dynar); // I used this also

如何从dynar_dynar检索值(“字符串”?所以我想从dynar得到这个dynar_dynar。我用这个代码,但没用。
    xbt_dynar_t temp_dynar = xbt_dynar_new(sizeof(char[20]), NULL);
    xbt_dynar_get_cpy(dynar_dynar, 0, temp_dynar); //get the dynar from dynar_dynar and put it to temp_dynar

为什么temp_dynar不包含任何内容?
UPD
我也试着用这个:
xbt_dynar_t temp_dynar = xbt_dynar_get_as(dynar_dynar, 0, temp_dynar);

再次声明temp_dynar不包含任何内容。

最佳答案

底线是xbt_dyna现在应该被弃用。我们正在努力将所有的SimGrand源代码转换成C++标准容器。完成后,我们将从代码库中删除dynar。
您必须将字符串的地址推入dynar,而不是字符串本身。在下面的页面上滚动一点以获取完整的示例:
http://simgrid.gforge.inria.fr/simgrid/3.14/doc/group__XBT__dynar.html
尤其是,始终使用指向要存储的数据的指针:
// xbt_dynar_push(dynar_dynar, dynar); WRONG! don't do that xbt_dynar_push(dynar_dynar, &dynar); // RIGHT. Use a pointer to dynar
要检索指向的内容,最好使用此接口:
http://simgrid.gforge.inria.fr/simgrid/3.14/doc/group__XBT__dynar__speed.html
有关如何使用xbt_dynar_get_as()的示例,请参阅SimGrid源代码中的Grep。
这应该可以做到:
xbt_dynar_t dyn = xbt_dynar_get_as(dynar_of_dynars, 0, xbt_dynar_t);char *str = xbt_dynar_get_as(dyn, 0, char *);

09-04 09:49