【问题标题】:Do I need to memset a C struct in Swift?我需要在 Swift 中 memset 一个 C 结构吗?
【发布时间】: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)

【问题讨论】:

    标签: c swift struct memset


    【解决方案1】:

    来自Xcode 6.3 release notes

    导入的 C 结构现在在 Swift 中有一个默认的初始化器 将结构体的所有字段初始化为零。

    这意味着

    var hints = addrinfo()
    

    struct addrinfo的所有字段初始化为零,无需调用memset()

    【讨论】:

    • 我创建了libxmlxmlSAXHandler 结构(通过.modulemap 导入)并使用bytes&lt;T&gt; method 打印内存字节,但并非所有字节都是0。
    • 这可能是因为memory padding吗?
    • 我需要快速从内存中清除一个字符串吗?有什么帮助吗?
    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2018-06-08
    • 2012-12-16
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多