lua_next

int lua_next (lua_State *L, int index);

Pops a key from the stack, and pushes a key-value pair from the table at the given index (the "next" pair after the given key). If there are no more elements in the table, then lua_next returns 0 (and pushes nothing).

A typical traversal looks like this:

     /* table is in the stack at index 't' */
     lua_pushnil(L);  /* first key */
     while (lua_next(L, t) != 0) {
       /* 'key' is at index -2 and 'value' at index -1 */
       printf("%s - %s\n",
         lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1)));
       lua_pop(L, 1);  /* removes 'value'; keeps 'key' for next iteration */
     }

While traversing a table, do not call lua_tolstring directly on a key, unless you know that the key is actually a string. Recall that lua_tolstring changes the value at the given index; this confuses the next call to lua_next.