我需要在 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 中,调用类/结构的默认初始化程序会将所有内容初始化为 0nil。 在 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()

【讨论】:

我创建了libxmlxmlSAXHandler 结构(通过.modulemap 导入)并使用bytes&lt;T&gt; method 打印内存字节,但并非所有字节都是0。 这可能是因为memory padding吗? 我需要快速从内存中清除一个字符串吗?有什么帮助吗?

以上是关于我需要在 Swift 中 memset 一个 C 结构吗?的主要内容,如果未能解决你的问题,请参考以下文章

c语言里有memset()怎么用?需要啥头文件?

memset 与 memcpy

jQuery 中的 C++ memset() 等效项

在JAVA中有没有象C语言里的memset函数

memset()没有在c中设置内存

c/c++中对于memset的个人理解