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

我已经查看了 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)

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

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

原文链接 https://stackoverflow.com/questions/6471536

点赞
stackoverflow用户298661
stackoverflow用户298661

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

2011-06-24 17:35:13
stackoverflow用户743263
stackoverflow用户743263

尝试这个:

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))
2011-06-24 17:37:33