在C语言调用的函数中遍历Lua中的表

用户名

我试图从C调用Lua函数。Lu​​a函数创建一个表,然后对其进行迭代。当从Lua调用它时,它按预期方式工作,但是当我从C程序中调用它时,它按预期工作。有什么原因使我无法在这里尝试做什么?

test.lua:

function f()
    t = {["a"] = "aaa", ["b"] = "bbb", ["c"] = "ccc"}
    for z, v in t do
        print(t .. " " .. v)
    end
end

test.c:

#include <string.h>
#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main(void)
{
    char read_buffer[1024];

    lua_State *L = lua_open();
    luaL_openlibs(L);
    if (luaL_loadfile(L, "test.lua") || lua_pcall(L, 0, 0, 0))
        fprintf(stderr, "Error loading test.lua");

    lua_getglobal(L, "f");

    if(lua_pcall(L, 0, 0, 0) != 0)
        fprintf(stderr, "error: %s\n", lua_tostring(L, -1));

    strncpy(read_buffer, lua_tostring(L, -1), sizeof(read_buffer));
    lua_pop(L, 1);
    printf("got from lua: %s\n", read_buffer);

    lua_close(L);

    return 0;
}

谢谢!

大狼

我注意到上面的几个问题正在引起问题。

在这里:

function f()
  t = {["a"] = "aaa", ["b"] = "bbb", ["c"] = "ccc"}
  for z, v in t do
    print(t .. " " .. v)
  end
end

您不能for in像这样循环中使用lua表,除非您以某种方式使之t可调用(例如,使用__call例如)。您更有可能只是尝试遍历它,在这种情况下,您将使用pairs

  for z, v in pairs(t) do
  -- etc.

另一个错误是您试图将字符串连接到表上。不知道您打算在这里做什么。也许您想打印表格地址?您可以使用tostring它。

我注意到的第二个问题在您的C代码中:

if(lua_pcall(L, 0, 0, 0) != 0)

因此,f除非有错误,否则您不希望返回任何内容。但是在那之后,您尝试将顶层项目转换为字符串:

strncpy(read_buffer, lua_tostring(L, -1), sizeof(read_buffer));
lua_pop(L, 1);
printf("got from lua: %s\n", read_buffer);

这没有什么意义-目前可能堆栈上没有任何内容。这显然是代码中的逻辑错误。如果这被认为是错误处理的一部分,则应将其括在大括号中,以便对其进行适当的范围调整:

if(lua_pcall(L, 0, 0, 0) != 0)
{
    fprintf(stderr, "error: %s\n", lua_tostring(L, -1));
    strncpy(read_buffer, lua_tostring(L, -1), sizeof(read_buffer));
    lua_pop(L, 1);
    printf("got from lua: %s\n", read_buffer);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C语言中调用的函数中,遍历Lua中的表

来自分类Dev

Lua-C ++集成:从C ++调用表中的函数

来自分类Dev

从Lua的活动程序中调用C ++函数

来自分类Dev

Lua C API如何确定将函数称为类成员还是仅从表中调用函数?

来自分类Dev

无法在Lua中调用函数

来自分类Dev

如何在Lua中遍历表?

来自分类Dev

从R语言调用的C函数中的动态内存分配

来自分类Dev

如何在C ++中调用递归链表遍历函数

来自分类Dev

使用lua.vm.js在JavaScript中遍历Lua表

来自分类Dev

Lua中的表库中缺少函数

来自分类Dev

从lua中另一个表内部的表内部调用函数

来自分类Dev

从其他lua文件中调用函数

来自分类Dev

Lua中的“ for in”循环调用函数吗?

来自分类Dev

'this'对Lua中函数调用者的引用

来自分类Dev

在lua中调用动态ffi函数

来自分类Dev

lua函数调用中的参数名称

来自分类Dev

Lua中自调用匿名函数的错误

来自分类Dev

如何从lua中的moonscript调用函数?

来自分类Dev

在lua中调用带括号的冒号函数

来自分类Dev

从C ++调用Lua表函数并带有自输入函数

来自分类Dev

C ++ Lua从Lua表中获取价值

来自分类Dev

从C ++访问Lua中的表

来自分类Dev

在C ++中调用函数

来自分类Dev

从C ++调用Lua函数

来自分类Dev

从C ++调用Lua函数

来自分类Dev

Lua-是否可以从表值中调用函数并返回其值

来自分类Dev

lua and_index函数中的元表

来自分类Dev

函数名称中的Java语言调用函数

来自分类Dev

如何从C / C ++访问lua脚本中的局部变量或调用局部函数?