使用标准 Lua 模块的函数总是会返回运行时错误。代码示例:
//...
char script[] = "io.write(\"Hello!\n\")";
printf("%d\n", luaL_loadbuffer(L, script, strlen(script), NULL));
printf("%d\n", lua_pcall(L, 0, 0, 0));
//...
屏幕上显示:
0
2
根据lua.h中错误的定义,数字2对应的是LUA_ERRRUN。
同时,同一行在终端中工作:
$ lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> io.write("Hello!\n");
Hello!
使用标准的 lua 元素不会导致错误:
//...
char script[] = "print(\"Hello!\")";
printf("%d\n", luaL_loadbuffer(L, script, strlen(script), NULL));
printf("%d\n", lua_pcall(L, 0, 0, 0));
//...
输出:
0
Hello!
0
使用这些功能的正确方法是什么?谢谢!
要以可读的形式获取错误消息,您可以使用一个函数
lua_tostring,对于您的示例,它应该说:此消息表明它
Lua在其一侧发现了一条未完成的线。事实是,C 在将字符串传递到任何地方之前,将控制字符
\n转换为换行符,而在一旁,Lua代码如下所示:这在语法上是无效的。
避免此错误的方法是确保 C 不会干扰和弄乱字符串。这是通过双重转义控制字符来完成的:
\\n。最终结果应该是这样的:
如果您从文件加载脚本,那么就不会发生这样的错误,当然,也不必在那里进行双重转义。
最后,如果你正确地处理了错误,就像上面的例子一样,那么用谷歌搜索错误文本的解决方案就不难了。