我有一些代码可以从Obj C转换为Swift,涉及strncpy
。
最初的Obj C代码:
const char * c_amount = [[NSString stringWithFormat:@"%08d", (int)([amount floatValue])] UTF8String];
strncpy(request.amount, c_amount, (unsigned int)sizeof(request.amount));
我在Swift上尝试过的事情:
let c_amount = String(format: "%08d", Int(CFloat(amount))).utf8
strncpy(request.amount, c_amount, UInt(sizeof(request.amount)))
但是这给了我错误:
Cannot convert value of type '(Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)' to expected argument type 'UnsafeMutablePointer<Int8>'
我根本不理解如何修复错误,因为我很少使用Swift上的指针。有人可以帮忙吗?
答案 0 :(得分:2)
我真的,真的,真的建议您弄清楚代码实际在做什么,而不是试图调用strncpy。 strncpy很危险。不仅危险,而且危险。如果我在代码审查中看到strncpy(除非可能在4月1日之前发生),该代码将被彻底拒绝。它不会被接受的机会。
将request.amount更改为String并使用它完成。
答案 1 :(得分:1)
var c_amount = someFunctionReturningCChar()
let name = withUnsafePointer(c_amount) {
String.fromCString(UnsafePointer($0))!
}
这假设c_amount中的字节是有效的NUL终止的UTF-8序列。