如何在LuaJIT中打印固定大小的字符数组?

我正在尝试打印存储在固定数组中的空终止字符串的内容。该数组在开始时被memset为零,然后填充为一个空终止字符串。我试图打印这个字符串。

这个可以工作:

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

注意:本帖的代码已经被编辑而没有编译。

看起来我没有正确处理数组。正确的做法是什么?

点赞
用户646619
用户646619

你不能直接使用打印函数打印C字符串。你需要将其先转换为Lua字符串,或者使用C的printf函数。

print("Name: ", ffi.string(x.name))

或者

ffi.C.printf("Name: %s", x.name) -- 注意:需要先使用cdecl printf
2014-11-05 13:10:52