通过 FFI 将字符串 table 数组从 C 返回到 LuaJIT

Returning a string table array from C to LuaJIT via FFI

我想要一个 C 函数 return 一个字符串 table 数组(例如 {"a", "b", "c"})通过 LuaJIT 到 Lua 脚本。

哪种方法最好?

我想到了 return 使用一些分隔符(例如 "a|b|c")连接一个字符串,然后将其拆分为 Lua,但我想知道是否有更好的方法。

编辑:我正在使用 LuaJIT FFI 调用 C 函数。

我认为完成此操作的最简单方法是让 C 代码 return 一个包含字符串数组和长度为 Lua 的结构,然后写一点 Lua将其具体化为您想要的数据结构。

在 C:

typedef struct {
    char *strings[];
    size_t len;
} string_array;

string_array my_func(...) {
    /* do what you are going to do here */
    size_t nstrs = n; /* however many strings you are returning */
    char** str_array = malloc(sizeof(char*)*nstrs);
    /* put all your strings into the array here */
    return {str_array, nstrs};
}

在Lua中:

-- load my_func and string_array declarations
local str_array_C = C.ffi.my_func(...)
local str_array_lua = {}
for i = 0, str_array_C.len-1 do
    str_array_lua[i+1] = ffi.string(str_array_C.strings[i])
end
-- str_array_lua now holds your list of strings