gpt4 book ai didi

c++ - Node-ffi 绑定(bind)到 NULL 终止的 C 字符串数组,但得到 `Segmentation fault: 11`

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

我正在使用 Node-ffi 为 MITIE 编写 Node 绑定(bind).但是我遇到了问题,

函数的参数是 char**:一个以 NULL 结尾的 C 字符串数组,如下所示:

int run (char** tokens)
{
try
{
std::vector<std::string> words;
for (unsigned long i = 0; tokens[i]; ++i)
words.push_back(tokens[i]);

return 1;
}
catch(...)
{
return 0;
}
}

这就是我使用 ffi 所做的:

const ffi = require('ffi');
const ArrayType = require('ref-array');

const StringArray = ArrayType('string')

const test = ffi.Library('test', {
'run': [ 'int', [StringArray] ]
});

test.run(['a', 'b']);

但我得到:段错误:11

我把示例代码上传到this repo .

在这个 repo 中你还可以看到我写了一个 Python 绑定(bind) ctypes , 运行良好。

这是我的运行环境:

  • npm@3.10.10
  • node@7.10.0
  • Darwin x64 17.0.0
  • MacBook Pro(13 英寸,2016 年,四个 Thunderbolt 3 端口)
  • macOS 10.13

最佳答案

你必须用 NULL 显式终止 token 数组:

const ffi = require('ffi');
const ArrayType = require('ref-array');
const ref = require('ref');

const StringArray = ArrayType('string')

const test = ffi.Library('test', {
'run': [ 'int', [StringArray] ]
});

console.log(test.run(['a', 'b', ref.NULL])); // -> 2

关于c++ - Node-ffi 绑定(bind)到 NULL 终止的 C 字符串数组,但得到 `Segmentation fault: 11`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46991681/

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