[英]Unable to pass string array inside structure to a C function using FFI
我正在嘗試使用FFI將字符串數組傳遞給C函數
var ffi = require('ffi');
var ref=require('ref');
var ArrayType = require('ref-array');
var Struct = require('ref-struct');
var StringArray = ArrayType('string');
var myStructure=Struct({
'ulonglong' : ref.types.ulonglong,
'charptrptr' : StringArray,
'stringArr' : StringArray
});
var structObjNew=new myStructure();
structObjNew.ulonglong=123456;
structObjNew.charptrptr=["sample","ptrptr"];
structObjNew.stringArr=["sample1","ptrptr1"];
var libfactorial = ffi.Library('./stringArray', {
'readArray': [ 'string', [ myStructurePtr]] //creating header definition
});
var output=libfactorial.readArray(structObjNew.ref());
上述代碼的.C文件
struct myStructure
{
unsigned long long ulonglong;
char **charptrptr;
char stringArr[3][10];
};
EXPORT char* readArray(struct myStructure *nameofstr) {
printf("Value from first param from structure of type char**\n");
printf("%s\n",nameofstr->charptrptr[0]);
printf("%s\n",nameofstr->charptrptr[1]);
printf("value form second param from structure of thype char[][]\n");
printf("%s\n",nameofstr->stringArr[0]);
printf("%s\n",nameofstr->stringArr[1]);
}
我得到像這樣的輸出:
char**
類型的結構中第一個參數的值char**
樣本:ptrptr
char[][]
類型的結構中第二個參數的值
▲é┌之類的垃圾值
即,當我將數組傳遞給char**
類型時,我得到了正確的輸出,但是當我嘗試將其傳遞給在結構內部聲明的 char*[]
或char[][]
格式時,我得到的是垃圾值。
但是直接將像["aa","bb"]
這樣的字符串數組傳遞給C中的char*[]
參數可以正常工作。 當我在結構中使用它時,它對我不起作用。
您的第二個數組具有固定大小的字符。
試試看:
var CharArray10 = ArrayType('char', 10)
var StringArray3 = ArrayType(CharArray10, 3)
var myStructure = Struct({
'ulonglong' : ref.types.ulonglong,
'charptrptr' : StringArray,
'stringArr' : StringArray3
});
這里有更多例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.