从 const char* 转换为 Swift 字符串

标签 c swift

我有一个 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 字符串?

谢谢!

最佳答案

您的 Swift 代码是正确的,您可以将其稍微缩短为

// Swift 2:
let str = String.fromCString(get_c_string())
// Swift 3:
let str = String(cString: get_c_string())

但是,您必须确保从 C 函数返回的指针 函数返回时仍然有效。举个例子

const char* get_c_string() {
    char s[] = "abc";
    return s;
}

返回局部堆栈变量的地址,这是未定义的行为。

你可能不得不复制字符串(然后想想什么时候 以及释放内存的位置)。

关于从 const char* 转换为 Swift 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018494/

相关文章:

ios - 相同类别的 SpriteKit/SKPhysics radialGravityField 总是相互吸引?

c - 动态分配的结构数组传递给函数并通过索引访问

c - 在 C 中访问共享内存时出现段错误

c - 打开名称为 socket :[4023] 的套接字

ios - 如何为目标 V​​C 的子项设置协议(protocol)委托(delegate)?

xcode - 在我的项目之外创建 NSManagedObjectSubclasses 生成类

Swift:UIButton edgeinsets 在单元格重绘/滚动后应用

c - dll中的导出函数

C编程: Forward variable argument list

swift - 如何获取单元格的中心点