我正在使用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>>
这样的内容,我需要做什么才能进行转换?
答案 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);
才能使它工作。