如何在Swift中使用strncpy?

时间:2016-10-31 07:18:51

标签: objective-c swift xcode

我有一些代码可以从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上的指针。有人可以帮忙吗?

2 个答案:

答案 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序列。