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

时间:2016-09-13 10:40:23

标签: lua luajit

我想让C函数通过LuaJIT将字符串表数组(例如df1 : Column1 Column2 Column3 0 abc a ddd 1 pqr b ccc 2 stu c aaa 3 mno d bbb 4 xyz e eee )返回到Lua脚本。

哪种方法最好?

我想过用一些分隔符(例如df['column1'] == df['columnA'] )返回单个连接字符串然后在Lua中将其拆分,但我想知道是否有更好的方法。

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

1 个答案:

答案 0 :(得分:3)

我认为实现这一目标的最简单方法是让C代码返回一个包含字符串数组和长度为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