3

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); 

私が正しくやっていないことについてのアイデアはありますか? セグメンテーション違反が発生しています。

更新: セグメンテーション違反を取り除きます。しかし、今では . を含む Erlang バイナリを返すことができませんString

enif_make_stringbinary.data を使用すると、Erlang で文字列が得られます。しかしenif_make_binary、バイナリで使用しようとすると、次のような<<0,0,0,0,0,0,0,0,112,40,129,20>>ものが表示されます。変換するには何をする必要がありますか?

4

2 に答える 2

0

問題を発見しただけです。

バイナリではなくバイナリのアドレスを返すことになっていたので、return enif_make_binary(env, &output_binary);それを機能させるだけです。

于 2012-03-02T17:55:38.570 に答える
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");
于 2012-03-01T18:33:37.180 に答える