我正在使用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上得到一个字符串。但是,当我尝试将enif_make_binary与二进制文件一起使用时,会得到类似<<0,0,0,0,0,0,0,0,112,40,129,20>>的信息,我需要怎么做转换?

最佳答案

您为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");

关于c - 通过NIF创建指向带有char *数据的Erlang二进制文件*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9521854/

10-16 20:35