Привязки Node-ffi к массиву C-строк, заканчивающихся NULL, но получили `Ошибка сегментации: 11`

Я использую Node-ffi, чтобы написать привязки Node для Mitie. Но у меня проблема,

Аргумент функции char**: Массив строк 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']);

Но я получил: Segmentation fault: 11,

Я загрузил образец кода в это репо.

И в этом репо вы также можете видеть, что я написал привязки Python ctypes, Работает хорошо.

Вот моя операционная среда:

0

Решение

Вы должны явно завершить массив токенов с помощью NULL:

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]