LuaJIT和FFI:如何正确使用char *?

Lyn*_*ice 4 lua

我已经看过LuaJIT教程,网址为:http ://luajit.org/ext_ffi_tutorial.html

我试图深入了解Lua,并想了解在用C语言编写的“ libutility.so”中调用一个简单的“小写”函数对我来说有多么容易。

所以这是我要调用的C函数:

void lowercase(char* str){    
    int z;    
    for (z = 0; str[z]; z++){    
      str[z] = tolower(str[ z ]);    
    }    
}
Run Code Online (Sandbox Code Playgroud)

所以现在我想从Lua调用此函数...这是使用LuaJIT的FFI编写的代码

local ffi = require("ffi")
ffi.cdef[[
void lowercase(char* str);
]]
local utility = ffi.load("utility")    
local buf = ffi.new("char[?]", 11)
ffi.copy(buf, "HELLO WORLD")    
utility.lowercase(buf)
print("Result: ", #str)
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用...好吧,我认为在上面的最后一行代码之前,它都起作用。

有人可以给我一些建议,告诉我如何调用此“小写”功能并正确打印出结果吗?

mal*_*kia 5

尝试这个:

local ffi = require("ffi")
ffi.cdef[[
void lowercase(char* str);
]]
local utility = ffi.load("utility")    
local buf = ffi.new("char[?]", "HELLO WORLD")
utility.lowercase(buf)
print("Result: ", ffi.string(buf))
Run Code Online (Sandbox Code Playgroud)