2012-03-01 11 views
2

NIFを使用してC-Erlangの統合を行っていて、Binaryを初期化し、そのデータを指すchar *を追加するのに問題があります。私は右やっていないんだものについてNIFを使ってErlangバイナリを作成し、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>>変換するために何をする必要がありますか?

答えて

0

ただ問題を見つけました。

バイナリではなくバイナリのアドレスを返すようになっていたので、return enif_make_binary(env, &output_binary);だけで動作します。

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"); 
+0

答えていただきありがとうございますが、ここでは機能しませんでした。 まだセグメント違反が発生しています。 –

+0

'output_binary-> size'を' sizeof "に設定する必要があります。これは文字列" 'です。 – ouah

+0

ありがとうございます。それはうまくいきましたが、私はStringでErlangバイナリを取得できませんでした。 (私は質問を更新しました) –

関連する問題