【问题标题】:Creating a Erlang binary through NIF with data pointing to a char *通过 NIF 创建 Erlang 二进制文件,数据指向 char *
【发布时间】:2012-03-20 06:44:23
【问题描述】:

我正在使用 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>> 的内容,我需要做什么才能进行转换?

【问题讨论】:

    标签: c erlang erlang-nif


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,但在这里不起作用。我仍然遇到分段错误。
    • 您还必须将output_binary->size 设置为sizeof "Here is a string"
    • 谢谢。它有效,但我无法获得带有字符串的 Erlang 二进制文件。 (我已经更新了问题)
    【解决方案2】:

    刚刚发现问题。

    我应该返回二进制而不是二进制的地址,所以只需 return enif_make_binary(env, &output_binary); 就可以了。

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2012-07-04
      • 2014-11-22
      • 2014-12-17
      • 2010-12-20
      • 2020-12-12
      • 1970-01-01
      • 2013-01-03
      • 2019-03-01
      相关资源
      最近更新 更多