2016-12-28 16 views
3

私はこのシグネチャを持つ機能を持っている:クリスタルCバインディング:戻り値の型はchar *

const char* get_version(); 

私の宣言は次のとおりです。

fun get_version(): LibC::Char* 

そして、それを使用する:

方法
version = MyLib.get_version() 
puts version # how to convert to String? 

リターン文字列を管理できますか? Cの文字列の長さを測定し、それを手動でCrystal文字列に変換するためにstrlenもインポートする必要がありますか?

答えて

2

Char*ポインタをString.new(MyLib.version)で囲みます。文字列の長さを知っている場合は、String.new(ptr, size)に電話することもできます。

これはポインタからデータをコピーするので、CバインディングはCrystal文字列に影響を与えずにポインタを解放することに注意してください。

+0

非常に良い。私はしばしば最も簡単な解決策を見逃しています:) – Mat