I have a c function which I access from a bridging header that returns a const char*
:
const char* get_c_string();
I then try to convert it to a Swift String:
let str = String.fromCString(UnsafePointer<Int8>(get_c_string()))
print(str)
... but it just prints garbage:
Optional("\u{14}\0\0")
I can find how to pass Swift string to C but not the other way around. How can I convert a const char*
to a Swift String?
Thanks!
Your Swift code is correct, you can shorten it slightly to
// Swift 2:
let str = String.fromCString(get_c_string())
// Swift 3:
let str = String(cString: get_c_string())
However, you must ensure that the pointer returned from the C function is still valid when the function returns. As an example
const char* get_c_string() {
char s[] = "abc";
return s;
}
returns the address of a local stack variable, which is undefined behavior.
You might have to duplicate the string (and then think of when and where to release the memory).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With