我需要在 Swift 中 memset 一个 C 结构吗?
Posted
技术标签:
【中文标题】我需要在 Swift 中 memset 一个 C 结构吗?【英文标题】:Do I need to memset a C struct in Swift? 【发布时间】:2015-06-22 02:13:52 【问题描述】:AFAIK,在 swift 中,调用类/结构的默认初始化程序会将所有内容初始化为 0
、nil
。
在 C(例如套接字编程)中,有时 memset 用于在使用结构之前将所有内容设置为 0。我是否也需要在 swift 中使用 memset 还是按照我的方式编写它?
(顺便说一句,在这种情况下使用memset
,因为hints
应设置为0,但以下2 个参数除外。非0(垃圾等)将在调用res
时对res
产生副作用。
C:
struct addrinfo hints, *res;
int status;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
status = getaddrinfo(NULL, MYPORT, &hints, &res);
斯威夫特:
var res = UnsafeMutablePointer<addrinfo>()
var hints = addrinfo()
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM
let status = getaddrinfo(nil, MYPORT, &hints, &res)
【问题讨论】:
【参考方案1】:来自Xcode 6.3 release notes:
导入的 C 结构现在在 Swift 中有一个默认的初始化器 将结构体的所有字段初始化为零。
这意味着
var hints = addrinfo()
将struct addrinfo
的所有字段初始化为零,无需调用memset()
。
【讨论】:
我创建了libxml
的xmlSAXHandler
结构(通过.modulemap 导入)并使用bytes<T>
method 打印内存字节,但并非所有字节都是0。
这可能是因为memory padding
吗?
我需要快速从内存中清除一个字符串吗?有什么帮助吗?以上是关于我需要在 Swift 中 memset 一个 C 结构吗?的主要内容,如果未能解决你的问题,请参考以下文章