Crystal C绑定:返回类型char *

我有这个签名的功能:

const char* get_version();

我的声明是:

fun get_version(): LibC::Char*

并使用它:

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

如何管理返回字符串?我是否还必须导入strlen来测量C字符串的长度并手动将其转换为Crystal字符串?

回答(1)

2 years ago

String.new(MyLib.version) 包装 Char* 指针 . 如果您知道字符串长度,也可以调用 String.new(ptr, size) .

请注意,这将从指针复制数据,因此C绑定可能会释放其指针而不会影响Crystal String .