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

我想通过 LuaJIT 将一个 C 函数返回的字符串表数组(例如 {"a", "b", "c"})返回到 Lua 脚本。

哪种方式最好呢?

我想返回一个带有某个分隔符的单个拼接字符串(例如 "a|b|c"),然后在 Lua 中分割它,但我想知道是否有更好的方法。

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

点赞
用户6614127
用户6614127

我认为最简单的方法是在 C 代码中返回一个包含字符串数组和长度的结构体,并编写一些 Lua 代码将其实体化为所需的数据结构。

在 C 代码中:

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

string_array my_func(...) {
    /* 在此处执行你要执行的操作 */
    size_t nstrs = n; /* 返回的字符串数量 */
    char** str_array = malloc(sizeof(char*)*nstrs);
    /* 在此处将所有字符串存放到数组中 */
    return {str_array, nstrs};
}

在 Lua 代码中:

-- 加载 my_func 和 string_array 结构体定义
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 现在保存了你的字符串列表
2016-09-13 13:57:56