如何在lua中获取char*的值

问题描述 投票:0回答:1

我正在尝试在lua中调用

c
函数,
c
函数位于
so
文件中,代码如下:

typedef struct attributes_s {
    char name[256];
    char id[256];
}attributes_t

int get_service_instances(attributes_t **array, size_t *service_nums);

这个函数会给

array
service_nums
赋值,
array
可能有多个
attributes_t
实例,现在我只让它返回一个。
lua
代码是这样的

local ffi_Cli = ffi.load("client")

ffi.cdef[[
typedef struct attributes_s {
    char name[256];
    char id[256];
}attributes_t

int get_service_instances(attributes_t **array, size_t *service_nums);
]]
local get_services_result = ffi.new("attributes_t*[1]")
local res_len = ffi.new("size_t[1]")
if ffi_Cli.get_service_instances(get_services_result, res_len) ~= 0 then
  print("get failed")
  return
end
print(get_services_result[1].name)  -- get cdata<char (&)[256]> 
print(ffi.string(get_services_result[1].name, 256))  -- get coredump

如果我使用

ffi.string(get_services_result[1].name, 256)
或将256更改为其他数字,它将coredump,
gdb bt
是这样的

#0  0x00007f55a558cff1 in __strlen_sse2_pminub () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64 libgcc-4.8.5-28.el7.x86_64 libstdc++-4.8.5-28.el7.x86_64 libuuid-2.23.2-52.el7.x86_64 libyaml-0.1.4-11.el7_0.x86_64 nss-softokn-freebl-3.34.0-2.el7.x86_64 sssd-client-1.16.0-19.el7.x86_64 zlib-1.2.7-17.el7.x86_64
(gdb) bt
#0  0x00007f55a558cff1 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1  0x00007f55a78a64a6 in lj_cf_ffi_string (L=0x7f55a831a380) at lib_ffi.c:691

我不知道如何获得

attributes_t
的值,为什么我不能使用
char*
获得
ffi.string()

lua luajit
1个回答
0
投票

我像这样将 1 更改为 0

get_services_result[0].name
并且它有效。但
lua
中的下标不是从1开始的吗?

© www.soinside.com 2019 - 2024. All rights reserved.