从const char *转换为Swift字符串

我有一个ac函数,我从一个返回const char*的桥接头访问:

 const char* get_c_string(); 

然后我尝试将其转换为Swift字符串:

 let str = String.fromCString(UnsafePointer(get_c_string())) print(str) 

…但它只打印垃圾:

 Optional("\u{14}\0\0") 

我可以找到如何将Swift字符串传递给C而不是相反的方式。 如何将const char*转换为Swift String?

谢谢!

您的Swift代码是正确的,您可以稍微缩短它

 // Swift 2: let str = String.fromCString(get_c_string()) // Swift 3: let str = String(cString: get_c_string()) 

但是,必须确保在函数返回时从C函数返回的指针仍然有效。 举个例子

 const char* get_c_string() { char s[] = "abc"; return s; } 

返回本地堆栈变量的地址,这是未定义的行为。

您可能必须复制字符串(然后考虑释放内存的时间和位置)。