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

时间:2011-06-24 17:32:56

标签: 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 ]);    
    }    
}

所以现在我想从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)

上面的代码不起作用......我认为它可以工作到上面的最后一行代码。

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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

我不确定str是什么,但tolower会返回它的值,所以你真的想要打印buf