我正在尝试在Swift 3.0中使用strlcpy,但不断收到错误“无法转换类型的值'unsafeMutablePointer< _>'预期参数类型'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;
答案 0 :(得分:1)
C数组作为元组导入Swift。但内存布局
C结构保存在Swift中,因此您可以使用该地址
第一个元组元素loginEvent.portalUri.0
(类型CChar
又名Int8
)
作为目标地址。
您也可以直接将Swift 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))
}