Pat Mustard Pat Mustard - 5 months ago 90
Swift Question

Converting from const char* to Swift string

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()))

... but it just prints garbage:


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?



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).