c - 读取文件 lua 时出现紧急错误

标签 c lua lua-api

我使用以下代码创建了一个文件

Request = {
  TimeAdd = true;
  DaysAdd = true;
};

源代码是用C语言编写的

    lua_getglobal(L, "Request")
    lua_getfield(L, -1, "TimeAdd");

       time_request = lua_toboolean(L, -1);

    lua_getfield(L, -1, "DaysAdd");
        data_request = lua_toboolean(L, -1);

我正常编译程序,出现lua错误

LUA PANIC:调用 Lua API 时出现不 protected 错误(尝试索引 bool 值)

最佳答案

逐步执行代码,可视化 Lua 堆栈,错误就会变得明显。

lua_getglobal(L, "Request"); // Stack: [] -> [(Request table)]
lua_getfield(L, -1, "TimeAdd"); // [>(Request table)<] -> [(Request table), true]

time_request = lua_toboolean(L, -1); // [(Request table), >true<]

lua_getfield(L, -1, "DaysAdd"); // [(Request table), >true<] ERROR: Cannot index `true`

当您调用lua_getfield(L, -1, "DaysAdd")时,堆栈顶部是值true,该值不可索引。

在获取 DaysAdd (lua_pop(L, 1)) 之前将 true 值从堆栈中弹出,或者将堆栈索引调整为 lua_getfield指向请求表 (lua_getfield(L, -2, "DaysAdd"))

关于c - 读取文件 lua 时出现紧急错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533179/

相关文章:

c - 从 C 代码以 dB 为单位设置 ALSA 主音量

numpy - Lua Torch 相当于 np.where()?

c++ - Lua 5.2 - 对象中的 C++ 对象(使用 lua_lightuserdata)

c++ - ./lua/addtest.lua :9: attempt to index local 'testobj' (a userdata value)]]

c - 运行C程序返回-1.#QNAN0而不是存储在浮点变量中的数字

c - 打印数据并给出开始和结束

C getopt_long_only 不带别名

lua - 如何创建一个函数来返回传递给它的第一个非零、非空字符串?

c - luaL_openlibs 的隐式声明

c - lua中的 "dofile"和C API中的 "luaL_dofile"有什么区别?