LuaJIT & FFI: Как правильно использовать char *? - PullRequest
4 голосов
/ 24 июня 2011

Я посмотрел учебник LuaJIT по адресу: http://luajit.org/ext_ffi_tutorial.html

Я пытаюсь узнать больше о Lua и хотел посмотреть, как легко будет мне вызвать простую "строчную" функцию в "libutility.so", который я написал на C.

Итак, вот функция C, которую я хочу вызвать:

void lowercase(char* str){    
    int z;    
    for (z = 0; str[z]; z++){    
      str[z] = tolower(str[ z ]);    
    }    
}

Итак, теперь я хочу вызвать эту функцию из Lua ... вот мой код, использующий FFI LuaJIT

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 ]

5 голосов
/ 24 июня 2011

Попробуйте это:

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 голос
/ 24 июня 2011

Я не совсем уверен, что такое str, но tolower возвращает его значение на месте, поэтому вы действительно хотите печатать buf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...