lua_isstring 迭代嵌套表时出现问题

我试图将一个表写入到ini文件中,一切工作得很好,直到我添加了一行 **lua_tostring(L, - 2)**,然后 lua_next(L, - 2) 开始出现错误。我不明白这行代码如何影响我的程序,我认为我只是从堆栈中获取了一个值。我该如何解决这个问题?

{
    // 将初始 nil 推入以初始化 lua_next
    lua_pushnil(inOutState);
    // 解析索引处的表格
    while (lua_next(inOutState, -2))
    {
        if (lua_isstring(inOutState, -1)) {
            string key = lua_tostring(inOutState, -2);
            string value = lua_tostring(inOutState, -1);
            inIniTree.put(suffix + key, value);
        }
        else if (lua_istable(inOutState, -1)) {
            suffix += lua_tostring(inOutState, -2); !!!!!! 没有这行代码函数可以正常运行 !!!!!!!
            setDataInIni(inOutState, inIniTree, suffix);
        }

        // 弹出值,保留键
        lua_pop(inOutState, 1);
    }
    return;
}
点赞
用户12918181
用户12918181

如果 lua_tostring() 的参数不是字符串类型,则会将栈中的值替换。这意味着您已更改 lua_next() 的键。您必须使用 lua_pushvalue() 复制值,然后再将其转换为字符串。

if (lua_isstring(inOutState, -1)) {
  lua_pushvalue(inOutState, -2);
  string key = lua_tostring(inOutState, -1);
  lua_pop(L, 1);
  string value = lua_tostring(inOutState, -1);
  inIniTree.put(suffix + key, value);
}
else if (lua_istable(inOutState, -1)) {
  lua_pushvalue(inOutState, -2);
  suffix += lua_tostring(inOutState, -1);
  lua_pop(L, 1);
  setDataInIni(inOutState, inIniTree, suffix);
}
2020-03-10 10:54:01