我试图打印存储在固定数组中的空终止字符串的内容。数组在开始时设置为零,然后填充空终止字符串。我试图打印字符串。
这有效:
ffi.cdef[[
typedef struct _t
{
uint16_t i;
const char * name;
} MyStruct;
]]
ffi.cdef[[
MyStruct* Get();
]]
local myDll = ffi.load("myDll")
local x = myDll.Get()
print("Name: %s", x.name)
这会导致错误:
ffi.cdef[[
typedef struct _t
{
uint16_t i;
char name[25];
} MyStruct;
]]
ffi.cdef[[
MyStruct* Get();
]]
local myDll = ffi.load("myDll")
local x = myDll.Get()
print("Name: %s", x.name)
第二个产生此错误:
27: bad argument #2 to 'print' (cannot convert 'char [25]' to 'char (&)[25]')
注意:代码是根据此帖子的原始编辑而不编译的。
我似乎不正确地处理数组。这样做的正确方法是什么?
答案 0 :(得分:0)
您无法使用打印功能直接打印c字符串。您需要先将其转换为Lua字符串,或使用C printf
函数
print("Name: ", ffi.string(x.name))
或
ffi.C.printf("Name: %s", x.name) -- Note: need to cdecl printf first