在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

C语言中受保护的函数调用

来自分类Dev

C语言中受保护的函数调用

来自分类Dev

CodeBlock中的kbhit函数在C语言中不起作用

来自分类Dev

当C语言中的对象向量中的lua_state过多时,lua_close()崩溃

来自分类Dev

当C语言中的对象向量中的lua_state过多时,lua_close()崩溃

来自分类Dev

获取存储在C语言中的Lua函数的“指针”

来自分类Dev

获取存储在C语言中的Lua函数的“指针”

来自分类Dev

Lua的C语言中的tostring()?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在序言中的函数中调用函数

来自分类Dev

在C语言中调用函数时\是什么意思?

来自分类Dev

如何编写一个日志记录函数或宏,该函数或宏可以将调用者的姓名附加到C语言中的日志记录输出中

来自分类Dev

C语言中的函数是在首次调用时或在程序启动时加载到内存中的吗?可以从内存中卸载吗?

来自分类Dev

遍历C语言中的C ++容器

来自分类Dev

无法在Lua中调用函数

来自分类Dev

C语言中的Getchar函数

来自分类Dev

C语言中的getlocale()函数

来自分类Dev

C语言中的Foreach函数

来自分类Dev

C语言中的Getchar函数

来自分类Dev

C语言中的位函数

来自分类Dev

c语言中的莱布尼茨函数

来自分类Dev

C语言中的函数。+ 数组

来自分类Dev

在C语言中,如何检测free()函数实现中的边界写入错误?

来自分类Dev

使用C语言中的“ sscanf”函数解析字符串中的子字符串

来自分类Dev

如何/何时在C语言中声明函数中的静态变量?

来自分类Dev

制作一个函数来计算C语言中PriorityQueue中的元素数量

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    C语言中受保护的函数调用

  4. 4

    C语言中受保护的函数调用

  5. 5

    CodeBlock中的kbhit函数在C语言中不起作用

  6. 6

    当C语言中的对象向量中的lua_state过多时,lua_close()崩溃

  7. 7

    当C语言中的对象向量中的lua_state过多时,lua_close()崩溃

  8. 8

    获取存储在C语言中的Lua函数的“指针”

  9. 9

    获取存储在C语言中的Lua函数的“指针”

  10. 10

    Lua的C语言中的tostring()?

  11. 11

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

  12. 12

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

  13. 13

    在序言中的函数中调用函数

  14. 14

    在C语言中调用函数时\是什么意思?

  15. 15

    如何编写一个日志记录函数或宏,该函数或宏可以将调用者的姓名附加到C语言中的日志记录输出中

  16. 16

    C语言中的函数是在首次调用时或在程序启动时加载到内存中的吗?可以从内存中卸载吗?

  17. 17

    遍历C语言中的C ++容器

  18. 18

    无法在Lua中调用函数

  19. 19

    C语言中的Getchar函数

  20. 20

    C语言中的getlocale()函数

  21. 21

    C语言中的Foreach函数

  22. 22

    C语言中的Getchar函数

  23. 23

    C语言中的位函数

  24. 24

    c语言中的莱布尼茨函数

  25. 25

    C语言中的函数。+ 数组

  26. 26

    在C语言中,如何检测free()函数实现中的边界写入错误?

  27. 27

    使用C语言中的“ sscanf”函数解析字符串中的子字符串

  28. 28

    如何/何时在C语言中声明函数中的静态变量?

  29. 29

    制作一个函数来计算C语言中PriorityQueue中的元素数量

热门标签

归档