簡體   English   中英

無法使用FFI將字符串數組內部結構傳遞給C函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM