【发布时间】:2015-10-19 01:37:31
【问题描述】:
我有一个由 CoreFoundation 方法填充的UnsafeMutablePointer<Character>。
如果我用 %s 占位符 NSLog 它,它的输出就很好了。
但如果我尝试使用 Swift 的 print,它只会写入内存地址。
几乎尝试了所有方法......我也不明白为什么如果我尝试访问底层的memory 属性,我会得到一个EXC_BAD_ACCESS。
let deviceName = UnsafeMutablePointer<Character>.alloc(64)
/* other statements in which deviceName is filled */
NSLog("device %s by %s", deviceName, manufacturerName)
// Outputs correctly the string
print(String(deviceName[0]))
// Get an EXC_BAD_ACCESS error at runtime
print(String(deviceName.memory))
// Get an EXC_BAD_ACCESS error at runtime
let str = withUnsafePointer(&deviceName) { String.fromCString(UnsafePointer($0)) }
print(str)
// Outputs an empty string
print("\(deviceName) by \(manufacturerName)")
// Outputs just memory addresses
【问题讨论】:
-
能否再显示一些您的代码,好吗?这个指针里有什么,你在做什么,你追求什么结果,当你尝试时会发生什么?
-
那么我可以假设它实际上是一个 C 字符串吗?
-
@matt 是的,
deviceName实际上是一个 C NUL 终止的字符数组 -
您尝试了
print(deviceName[0])却没有收到第一个字母?这让我觉得你根本就没有这个 C 字符串。你不能说明你是如何掌握它的吗? -
我希望 C 字符串是 UnsafePointer
。我看不出它怎么可能是 UnsafePointer .
标签: swift unsafe-pointers