gpt4 book ai didi

c - 无法使用 FFI 将结构内部的字符串数组传递给 C 函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:12 25 4
gpt4 key购买 nike

我正在尝试使用 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[][] 格式在结构内部声明,我得到一个垃圾值。

但是在 C 中直接将字符串数组如 ["aa","bb"] 传递给 char*[] 参数工作正常。当我在结构中使用它时,它对我不起作用。

最佳答案

您的第二个数组具有固定大小的字符。

试一试:

var CharArray10 = ArrayType('char', 10)
var StringArray3 = ArrayType(CharArray10, 3)

var myStructure = Struct({
'ulonglong' : ref.types.ulonglong,
'charptrptr' : StringArray,
'stringArr' : StringArray3
});

更多例子here

关于c - 无法使用 FFI 将结构内部的字符串数组传递给 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31204394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com