将预分配的char *缓冲区传递给c函数

时间:2017-09-19 11:26:26

标签: c swift pointers swift3

我在c中有一个函数接收一个预先分配的字符串并用数据填充它 - 我想从swift调用这个函数。 我发现了很多关于如何将字符串从swift传递给c的例子,但我发现没有一个显示在预分配字符串上写入数据的c函数。

c函数:

int GetData(char *dataJson, int maxSize);

在迅速的一面,此代码编译,但我无法找到如何预分配dataBuffer

let dataBuffer = UnsafePointer<UInt8>
GetData(dataBuffer, 2048)

有没有办法在Swift中这样做?

2 个答案:

答案 0 :(得分:4)

一种简单的方法是将数组作为inout表达式传递给&, 这会使用指向连续元素的指针调用该函数 存储:

var dataBuffer = Array<Int8>(repeating: 0, count: 2048)
let result = GetData(&dataBuffer, numericCast(dataBuffer.count))

优点是您不必手动管理内存, 当dataBuffer超出范围时,它会自动释放。

答案 1 :(得分:0)

我已经弄明白了,这是未来参考的代码:

let dataBuffer = UnsafeMutablePointer<Int8>.allocate(capacity: 2048)
GetData(dataBuffer, 2048)
let jsonData = String(cString: dataBuffer)