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

Nit*_*tay 3 c pointers swift swift3

我在c中有一个函数,该函数接收预分配的字符串并用数据填充它-我想从swift调用此函数。我已经找到了许多有关如何将字符串从swift传递到c的示例,但是没有发现任何示例显示将数据写在预分配的字符串上的c函数。

c函数:

int GetData(char *dataJson, int maxSize);
Run Code Online (Sandbox Code Playgroud)

从另一方面说,这段代码可以编译,但是我找不到如何进行预分配的方法 dataBuffer

let dataBuffer = UnsafePointer<UInt8>
GetData(dataBuffer, 2048)
Run Code Online (Sandbox Code Playgroud)

在Swift中有办法吗?

Mar*_*n R 6

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

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

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