0

UnsafeMutablePointer<Character>CoreFoundation メソッドで満たされています。

プレースホルダーでNSLog すると%s、問題なく出力されます。

しかし、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
4

1 に答える 1

0

あなたは自分のコードを見せたがらないようですので、私にはどうすることもできません。しかし、これは間違っているように見えます:

let deviceName = UnsafeMutablePointer<Character>.alloc(64)
/* other statements in which deviceName is filled */

これは、Swift で C 文字列を取得する方法ではありません。Swift で C 文字列であると信じている場合、間違っています。C 文字列であるためには、Swift Character (構造体!) ではなく、Int8 (C 文字) の配列である必要があります。

言い換えれば、C char (質問のタイトル) は Swift Character ではありません - それらは互いに似ていません。AC char は小さな数で、Swift Character は C が何も知らないオブジェクト指向言語のオブジェクトです!

于 2015-10-19T01:58:47.343 に答える