Получите размер таблицы Lua в C

Как я могу получить размер таблицы Lua в C?

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_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_objlen(L,1) на lua_len(L,1) .

    lua_objlen и lua_rawlen возвращают длину и не оставляют ее в стеке.

    lua_len ничего не возвращает и оставляет длину в стеке; он также уважает метаметоды.