在C中获取Lua表大小

bre*_*iba 6 c lua lua-api lua-table lua-5.1

如何在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);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的Lua代码:

local stages = {}
stages[1] = stage1
stages[2] = stage2
stages[3] = stage3

lstage.buildpollingtable(stages)
Run Code Online (Sandbox Code Playgroud)

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

Eta*_*ner 7

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.