SimGrid 中动态数组的动态数组
Dynamic array of dynamic arrays in SimGrid
我通过 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
中检索值 ("string")?所以我想从 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_dynar 现在应该弃用 。我们正在努力将所有 SimGrid 源代码转换为 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
Grep 在 SimGrid 源代码中获取如何使用 xbt_dynar_get_as()
的示例。
这应该可以解决问题:
xbt_dynar_t dyn = xbt_dynar_get_as(dynar_of_dynars, 0, xbt_dynar_t);
char *str = xbt_dynar_get_as(dyn, 0, char *);
我通过 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
中检索值 ("string")?所以我想从 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_dynar 现在应该弃用 。我们正在努力将所有 SimGrid 源代码转换为 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
Grep 在 SimGrid 源代码中获取如何使用 xbt_dynar_get_as()
的示例。
这应该可以解决问题:
xbt_dynar_t dyn = xbt_dynar_get_as(dynar_of_dynars, 0, xbt_dynar_t);
char *str = xbt_dynar_get_as(dyn, 0, char *);