我有一个%s
由CoreFoundation方法填充。
如果我使用print
占位符对其进行NSLog,则输出就好了。
但是如果我尝试使用Swift的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
。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/tvMoney" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Claim Money"
android:id="@+id/button" />
</LinearLayout>
答案 0 :(得分:0)
您似乎不愿意展示您的代码,因此我无法提供帮助。但这看起来错了:
let deviceName = UnsafeMutablePointer<Character>.alloc(64)
/* other statements in which deviceName is filled */
这不是如何在Swift中获取C字符串,如果你认为它在中是Swift中的C字符串,那你就错了;它需要是一个Int8(C字符)数组,而不是Swift Character(一个struct!),才能成为一个C字符串。
换句话说,C char(你的问题标题)不是Swift Character - 它们彼此之间没有没有。 C char是一个小数字,Swift Character是面向对象语言的对象,C对此一无所知!