【发布时间】:2017-01-20 22:29:41
【问题描述】:
我想让 C 函数通过 LuaJIT 将字符串表数组(例如 {"a", "b", "c"})返回到 Lua 脚本。
最好的方法是什么?
我想返回一个带有分隔符的单个连接字符串(例如"a|b|c"),然后在 Lua 中拆分它,但我想知道是否有更好的方法。
编辑:我正在使用 LuaJIT FFI 调用 C 函数。
【问题讨论】:
我想让 C 函数通过 LuaJIT 将字符串表数组(例如 {"a", "b", "c"})返回到 Lua 脚本。
最好的方法是什么?
我想返回一个带有分隔符的单个连接字符串(例如"a|b|c"),然后在 Lua 中拆分它,但我想知道是否有更好的方法。
编辑:我正在使用 LuaJIT FFI 调用 C 函数。
【问题讨论】:
我认为实现这一点最简单的方法是让 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
【讨论】: