Swift 4将String转换为UnsafeMutablePointer <int8>

时间:2018-12-24 05:22:16

标签: swift

我有一个C API,其签名如下:

SendPing(char * content);

现在,我想从Swift调用它。 Swift好像自动将其导入为:

SendPing(content: UnsafeMutablePointer<Int8>!)

但是,当我在Swift中像这样尝试时:

var content:String = "sampledata"
SendPing(content)

我认为Swift可以自动处理从“字符串”到“ UnsafeMutablePointer”的转换,但事实并非如此。报告的错误是:“无法将'String'类型的值转换为预期的参数类型'UnsafeMutablePointer!。我记得它在Swift 3.0中有效,但是我可能是错的。

在Swift 4.2中处理此问题的正确方法是什么?


有问题的解决方案发布了:Swift convert string to UnsafeMutablePointer<Int8>对我不起作用。我无法找出根本原因,但我想这是由于Swift 4.2而引起的。

1 个答案:

答案 0 :(得分:1)

跟进和总结:

1)链接Swift convert string to UnsafeMutablePointer<Int8>中的解决方案在Swift 4中不再有效。

2)要从字符串获取UnsafeMutablePointer(Int8),最简单的方法是:

let contentPointer = strdup(content)

3)但是,您应始终牢记释放内存是调用者的责任。上面的代码将使用新的内存,之后必须将其释放。

let contentPointer = strdup(content)
SendPing(content: contentPointer)
....

free(contentPointer)

否则,您将面临内存泄漏问题。