我想将包含Lua到C的数字的列表传递给C并在C中访问它。我该怎么办?
假设我有以下表格:
x = {1, 2, 3, 9, 5, 6}
我想将它发送给C并将该表存储在C中的数组中。
我用它发送了它:
quicksort(x)
其中quicksort
是我在C中定义的函数。
如何访问C中的x
?
答案 0 :(得分:9)
传递给函数的表将位于函数的堆栈中。您可以使用lua_getfield
或lua_gettable
对其进行索引。
使用lua_next
遍历表格,如果需要,可以在C中填充数组;但是,对于一个数组,只需从1迭代到#t
即可。
一些示例实用程序代码(未经测试):
int* checkarray_double(lua_State *L, int narg, int *len_out) {
luaL_checktype(L, narg, LUA_TTABLE);
int len = lua_objlen(L, narg);
*len_out = len;
double *buff = (double*)malloc(len*sizeof(double));
for(int i = 0; i < len; i++) {
lua_pushinteger(L, i+1);
lua_gettable(L, -2);
if(lua_isnumber(L, -1)) {
buff[i] = lua_tonumber(L, -1);
} else {
lua_pushfstring(L,
strcat(
strcat(
"invalid entry #%d in array argument #%d (expected number, got ",
luaL_typename(L, -1)
),
")"
),
i, narg
);
lua_error(L);
}
lua_pop(L, 1);
}
return buff;
}