我正在尝试使用 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**
示例:ptrptr
来自类型结构的第二个参数的值
char[][]
任何像 ▲é┌ 这样的垃圾值
即,当我将数组传递给char**
类型时,我得到了正确的输出,但是当我试图将它传递给char*[]
或在结构中声明char[][]
的格式 时,我得到一个垃圾值。
但是直接将字符串数组传递["aa","bb"]
给char*[]
C 中的参数可以正常工作。当我在结构中使用它时,它对我不起作用。