2011-06-24 258 views
3

我已经看过了LuaJIT教程在:http://luajit.org/ext_ffi_tutorial.htmlLuaJIT&FFI:如何正确使用char *?

我想获得更多的进入Lua和想看看它是多么容易让我在“libutility.so”调用一个简单的“小写”功能我已经写在C

因此,这里的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) 

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

有人可以请给我一些建议,我可以如何调用这个“小写”函数并正确打印结果吗?

回答

4

试试这个:

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

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