在迭代 Lua 表之前,在 c 中请求 Lua 表的大小。

这应该很简单,但在我的 C 代码中,我想在迭代表之前知道表的大小。我需要预先分配一些内存来存储来自该表的值。

我将此表作为参数传递给 lua c 函数。

static int lua_FloatArray(lua_State *L)
{
 int n = lua_gettop(L);
 if (n != 1 || lua_gettype(L, 1) != LUA_TTABLE)
 {
  luaL_error(L, "FloatArray expects first parameter to be a table");
  return 0;
 }
 int tablesize = ????;
 float *a = (float*)lua_newuserdata(L, tablesize * sizeof(float));
 lua_pushnil(L);
 int x = 0;
 while (lua_next(L, index) != 0)
 {
  a[x++] = (float)lua_tonumber(L, -1);
  lua_pop(L, 1); // Remove value, but keep key for next iteration
 }
 return 1;
}

tablesize?如何获得 tablesize?

原文链接 https://stackoverflow.com/questions/4815588

点赞
stackoverflow用户107090
stackoverflow用户107090

翻译:

没有这样的API函数。你需要自己计算项目数。

另一方面,您似乎正在使用C语言填充一个数组,我猜您有一个Lua表格,如 {10,20,30} 并且您假设您将按我列出的顺序获取项目。使用 lua_next 并非如此。请参见http://www.lua.org/manual/5.1/manual.html#pdf-next中的第二段。

Markdown格式:

没有这样的API函数。你需要自己计算项目数。

另一方面,您似乎正在使用C语言填充一个数组,我猜您有一个Lua表格,如 {10,20,30} 并且您假设您将按我列出的顺序获取项目。使用 lua_next 并非如此。请参见http://www.lua.org/manual/5.1/manual.html#pdf-next中的第二段。

2011-01-27 11:24:51
stackoverflow用户543484
stackoverflow用户543484

我不知道这是否真的是良好的编程实践,但我经常使用结构体形式的2D数组/表格,其中有一个指向你的数组的指针(或指向指针数组的指针)以及一个列数和行数的字段。

2011-01-27 11:39:33
stackoverflow用户221509
stackoverflow用户221509

如果你正在使用数组——带有整数键的表格,没有空洞(某些键被设置为nil)——你可以使用lua_objlen方法。引用手册的内容:

返回给定可接受索引处值的“长度”:对于字符串,这是字符串的长度;对于表格,这是长度操作符(“#”)的结果;

2011-01-27 11:41:51