2017-01-19 24 views
2

文字列を格納するLuaテーブルを関数に渡したいと思います。したがって、たとえば私が持っている場合LuaJIT ffi:文字列の配列をc関数に渡す方法

tStr = {"String1", "String2", "String3"} 

私はC関数にどのように渡しますか?私はffi.new呼び出すために持っていると思うが、これはどのようなタイプの私はわからない。..

local cVar = ffi.new("??" , tStr) -- I am not sure what to pass as type 

パラメータ

はまた、Cの関数で、私は全体のデータにアクセスする方法がわからない、それはなります文字列を指す文字列ポインタ、** str ??

void cFunction(**str); --What pointer type should be used here ?? 

... 謝罪私は明らかに何か質問を逃した場合。しかし、私はちょうどLua & ffiで始まっています。私はまだ物事のほとんどを認識していないです..

答えて

2

これは単純な例です:

local ffi = require"ffi" 
ffi.cdef"int execvp(const char*file, const char**argv);" 
local arg = ffi.new("const char*[3]", {"ls", "-l"}) 
ffi.C.execvp(arg[0], arg) 

の数(定数3(配列のサイズ)
が2に等しいことに注意してくださいLua {"ls", "-l"}から渡された文字列
と1(配列の最後の要素は実際にはゼロ終端文字です)。

+1

おそらく '{" ls "、" -l "}'を変数にアンカーする必要があります。 'const char *'はテーブル内の文字列リテラルにポインタを保持します。 – greatwolf

+1

@greatwolf - 一般的に、はい、文字列への参照を生かしておく必要があります。しかし、文字列リテラルは、それを含む関数(実際にはそのプロトタイプ)がガベージコレクトされない限り、自動的に生きています。 –

+2

これは私のために働いた..また、固定サイズの配列を割り当てる必要がなければ、 "const char * [?]"構文を使用してVLAを使用して要素の数を渡すことができるという事実を知りました。 。 –

関連する問題