通过NIF创建Erlang二进制文件,数据指向char *

时间:2012-03-01 18:30:30

标签: c erlang erlang-nif

我正在使用NIF进行C-Erlang集成,我在初始化Binary并添加指向其数据的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); 

关于我做得不对的任何想法?我遇到了分段错误。

更新:我摆脱了细分错误。但现在我无法返回包含String的Erlang二进制文件。

enif_make_string与binary.data一起使用,我在Erlang上获得了一个String。但是当我尝试将enif_make_binary与二进制文件一起使用时,我会得到像<<0,0,0,0,0,0,0,0,112,40,129,20>>这样的内容,我需要做什么才能进行转换?

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

刚刚发现问题。

我本来应该返回二进制文件的地址而不是二进制文件,所以只有return enif_make_binary(env, &output_binary);才能使它工作。