2016-09-23 69 views
0

我想在Swift 3.0中使用strlcpy,但一直收到错误“无法将类型'UnsafeMutablePointer < _>'的值转换为预期的参数类型'!UnsafeMutablePointer'”在Swift中使用C - 不能转换类型的值'UnsafeMutablePointer <_>'

这里是我的代码

func login(portal: String, username: String, password: String) { 
    var loginEvent = VidyoClientInEventLogIn() 
    let portalCArray = UnsafeMutablePointer<Int8>(mutating: (portal as NSString).utf8String!) 
    withUnsafeMutablePointer(to: &loginEvent.portalUri) { 
     strlcpy($0, portalCArray, MemoryLayout.size(ofValue: $0)) 
    } 
} 

其中VidyoClientInEventLogIn是:

typedef struct VidyoClientInEventLogIn_ 
{ 
    /*! Portal URI, i.e. "https://example.test.com" */ 
    char portalUri[URI_LEN]; 
} VidyoClientInEventLogIn; 

回答

1

C数组是我以元组引入Swift。但是Swift中保留了C结构的内存布局,因此可以使用第一个元组元素loginEvent.portalUri.0(其类型为CChar,又称为Int8) 的地址 作为目标地址。

您也可以直接传递夫特String作为参数传递给函数 服用UnsafePointer<CChar>参数,临时C字符串 表示被自动创建。

这简化事情:

func login(portal: String, username: String, password: String) { 
    var loginEvent = VidyoClientInEventLogIn() 
    strlcpy(&loginEvent.portalUri.0, portal, MemoryLayout.size(ofValue: loginEvent.portalUri)) 
} 
+0

这工作!谢谢 – Lneuner

相关问题