2012-03-01 3 views
2

Я занимаюсь интеграцией C-Erlang с использованием NIF, и у меня возникли проблемы с инициализацией Binary и добавлением символа *, указывающего на его данные.Создание двоичного файла Erlang через NIF с данными, указывающими на char *

Я делаю это так:

ErlNifBinary *output_binary; 
enif_alloc_binary(500, output_binary); 

strcpy(output_binary->data, "Here is a string"); 
return enif_make_binary(env, output_binary); 

Любые идеи о том, что я не делаю правильно? Я получаю ошибку сегментации.

ОБНОВЛЕНИЕ: Я избавляюсь от ошибки сегментации. Но теперь я не могу вернуть двоичный файл Erlang, содержащий String.

Использование enif_make_string с binary.data Я получаю строку на Erlang. Но когда я пытаюсь использовать enif_make_binary с двоичным, я получаю такие вещи <<0,0,0,0,0,0,0,0,112,40,129,20>>, что мне нужно сделать, чтобы конвертировать?

ответ

0

Только что выяснили, проблема.

Я должен был вернуть адрес двоичного файла, а не двоичный код, так что только return enif_make_binary(env, &output_binary); заставьте его работать.

0

Вы назначаете память для объекта output_binary, но output_binary->data указывает на недопустимый объект. Вы можете выделить память для output_binary->data следующим образом:

output_binary->data = malloc(sizeof "Here is a string"); // or enif_alloc 
strcpy(output_binary->data, "Here is a string"); 
+0

Спасибо за ваш ответ, но он здесь не работает. Я все еще получаю ошибку сегментации. –

+0

Вам также нужно установить 'output_binary-> size' в' sizeof '. Вот строка «'. – ouah

+0

Спасибо. Это сработало, но я не смог получить двоичный файл Erlang со строкой. (Я обновил вопрос) –

Смежные вопросы