在Swift中获取指向C char数组的指针

Uni*_*qus 5 c arrays tuples char swift

A有这样的结构(在mongodb c驱动程序的bson.h中定义):

typedef struct
{
  uint32_t domain;
  uint32_t code;
  char message[504];
} bson_error_t;
Run Code Online (Sandbox Code Playgroud)

在Swift中,我有一个指向这个结构的指针,如下所示:

err: UnsafePointer<bson_error_t> = ...
Run Code Online (Sandbox Code Playgroud)

现在无论我做什么,我都无法转换message[504](Swift认为它是(Int8,Int8,Int8,... 504次)的元组)以char*在String.fromCString()中使用它.甚至可以在Swift中做到这一点?作为一个临时解决方案,我在一个单独的.c文件中创建了一个辅助C函数,它接受err *bson_error_t并返回char*,但如果Swift不能单独执行它,这很奇怪.

Mar*_*n R 1

这是我的建议(类似于 rintaro 的方法,也许稍微简单一些):

var err: UnsafeMutablePointer<bson_error_t> = ...

var msg = err.memory.message
let msgString = withUnsafePointer(&msg) { String.fromCString(UnsafePointer($0)) }
println(msgString)
Run Code Online (Sandbox Code Playgroud)