Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从lua函数返回两个或多个表?_C++_C_Binding_Lua - Fatal编程技术网

C++ 如何从lua函数返回两个或多个表?

C++ 如何从lua函数返回两个或多个表?,c++,c,binding,lua,C++,C,Binding,Lua,如果有人向我解释当从C调用lua函数返回两个表或其中包含嵌套表的表时,lua-C堆栈是如何工作的,我将非常感激 当我尝试这样做时,它看起来很好,但只是第一眼看到: if ( lua_istable(L, -1) ) printf("its OK\n"); if ( lua_istable(L, -2) ) printf("its OK\n"); lua_pushnil(L); while ( lua_next(L, -2) )

如果有人向我解释当从C调用lua函数返回两个表或其中包含嵌套表的表时,lua-C堆栈是如何工作的,我将非常感激

当我尝试这样做时,它看起来很好,但只是第一眼看到:

if ( lua_istable(L, -1) )
        printf("its OK\n");

    if ( lua_istable(L, -2) )
        printf("its OK\n");

    lua_pushnil(L);

        while ( lua_next(L, -2) )
        {
            if(lua_isnumber(L, -1)) 
            {
                int i = (int)lua_tonumber(L, -1);
                const char *key = lua_tostring(L, -2); 
                printf("%d %s \n", i, key); 
            }
            lua_pop(L, 1);
        }
        lua_pop(L, 1);
在本例中,我得到两条消息,第一个表在级别1上,第二个表在级别2上,但是在这段代码之后,当我试图获取下一个表时,我的程序崩溃了 当我检查表上的堆栈是否存在时

for ( int i = -2; ; --i)
            if ( lua_istable(L, i) )
                printf("its %d OK\n", i);
我得到了以下结果:

its -233 OK
its -645 OK
its -1245 OK
its -1549 OK
its -2807 OK
its -2815 OK
its -2816 OK

有人能帮我解决这个问题吗?

请注意,当
lua_next
返回
0
is时,它弹出了键,但什么也没有按下,因此在
while
循环结束时,堆栈上有两个表

lua\u pop
之后,while
循环将顶部表格从堆栈中弹出


随后的
for
循环从索引
-2
开始,该索引超过了表,可以包含任何内容。此外,for的
循环永远不会终止。

我知道这个循环永远不会终止:)因此,如果我理解正确,我只需要执行相同的操作来获取另一个表,在将当前表从堆栈中弹出后,第二个表将替换它。非常感谢:)