在C中获取Lua表大小

如何在C中获得Lua表的大小?

static int lstage_build_polling_table (lua_State * L) { lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); lua_objlen(L,1); int len = lua_tointeger(L,1); printf("%d\n",len); ... } 

我的Lua代码:

 local stages = {} stages[1] = stage1 stages[2] = stage2 stages[3] = stage3 lstage.buildpollingtable(stages) 

它总是打印0。 我究竟做错了什么?

lua_objlen返回对象的长度,它不会在堆栈上推送任何内容。

即使它确实在堆栈上推送了一些内容,你的lua_tointeger调用正在使用表的索引,而不是lua_objlen在堆栈上推送的任何东西(如果它首先推送任何东西,它不会。)

你想要size_t len = lua_objlen(L,1); 对于lua 5.1。

或者size_t len = lua_rawlen(L,1); 对于lua 5.2。

在你给出的代码中,只需用lua_objlen(L,1)替换lua_len(L,1)

lua_objlenlua_rawlen返回长度,不要将它留在堆栈上。

lua_len什么lua_len返回,留下堆栈的长度; 它也尊重metamethods。