我需要在 Swift 中 memset 一个 C 结构吗?
Do I need to memset a C struct in Swift?
AFAIK,在 swift 中,调用 classes/structs 的默认初始化程序会将所有内容初始化为 0
,nil
。
在 C(例如套接字编程)中,有时 memset 用于在使用结构之前将所有内容设置为 0。我是否也需要在 swift 中使用 memset 还是我这样写就可以了?
(顺便说一句,在这种情况下使用 memset
因为 hints
应该设置为 0 除了以下 2 个参数。非 0(垃圾等)会对 [=17= 产生副作用] 调用时 getaddrinfo
.
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);
Swift:
var res = UnsafeMutablePointer<addrinfo>()
var hints = addrinfo()
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM
let status = getaddrinfo(nil, MYPORT, &hints, &res)
Imported C structs now have a default initializer in Swift that
initializes all of the struct's fields to zero.
这意味着
var hints = addrinfo()
将struct addrinfo
的所有字段初始化为零,无需调用memset()
。
AFAIK,在 swift 中,调用 classes/structs 的默认初始化程序会将所有内容初始化为 0
,nil
。
在 C(例如套接字编程)中,有时 memset 用于在使用结构之前将所有内容设置为 0。我是否也需要在 swift 中使用 memset 还是我这样写就可以了?
(顺便说一句,在这种情况下使用 memset
因为 hints
应该设置为 0 除了以下 2 个参数。非 0(垃圾等)会对 [=17= 产生副作用] 调用时 getaddrinfo
.
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);
Swift:
var res = UnsafeMutablePointer<addrinfo>()
var hints = addrinfo()
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM
let status = getaddrinfo(nil, MYPORT, &hints, &res)
Imported C structs now have a default initializer in Swift that initializes all of the struct's fields to zero.
这意味着
var hints = addrinfo()
将struct addrinfo
的所有字段初始化为零,无需调用memset()
。