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不能单独执行它,这很奇怪.
这是我的建议(类似于 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)