我在使用 Lua C API 时遇到问题。当 pcall(C API 函数)失败时,错误被压入堆栈。
lua_tostring
在堆栈上显示错误,但lua_gettop
显示堆栈为空。
#include <lua5.2/lauxlib.h>
#include <lua5.2/lua.h>
#include <lua5.2/lualib.h>
int main()
{
lua_State *L = luaL_newstate();
lua_pcall(L, 0, 0, 0);
printf("%d\n", lua_gettop(L)); // outputs 0, indicating empty stack
printf("%s\n", lua_tostring(L, -1)); // outputs "attempt to call a nil value", indicating non-empty stack
}
编译: gcc main.c `pkg-config --cflags lua5.2` `pkg-config --libs lua5.2`
此程序显示:0 尝试调用一个 nil 值
lua_gettop(L) 返回栈大小。在这里我得到 0。如何从空堆栈中获取字符串?
行为与 5.1 版本相同。