如何在LuaJIT中打印固定的char数组?

时间:2014-11-05 13:05:20

标签: c arrays lua luajit

我试图打印存储在固定数组中的空终止字符串的内容。数组在开始时设置为零,然后填充空终止字符串。我试图打印字符串。

这有效:

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]')

注意:代码是根据此帖子的原始编辑而不编译的。

我似乎不正确地处理数组。这样做的正确方法是什么?

1 个答案:

答案 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