【发布时间】:2016-08-14 19:29:27
【问题描述】:
我有一个 c 函数,我从一个返回 const char* 的桥接头访问它:
const char* get_c_string();
然后我尝试将其转换为 Swift 字符串:
let str = String.fromCString(UnsafePointer<Int8>(get_c_string()))
print(str)
...但它只是打印垃圾:
Optional("\u{14}\0\0")
我可以找到如何将 Swift 字符串传递给 C,但不能反过来。如何将 const char* 转换为 Swift 字符串?
谢谢!
【问题讨论】:
-
这个字符串有特殊字符?
-
不,它只是一个标准的
const char*c 字符串(来自std::string) -
您的示例中有两个不同的函数
get_c_string和call_hi。除此之外,您的转换方法应该有效。注意指针转换不是必须的:let str = String.fromCString(get_c_string()). -
typo - 调用与原型匹配,因此调用了正确的函数。它看起来像一个编码问题,但不确定是什么。
-
也许 get_c_string() 返回一个局部变量的内容(函数返回时变为无效)?您必须确保返回的指针在函数返回时仍然有效(例如 malloc 内存或 strdup 字符串)。你的 Swift 代码是正确的。