【发布时间】:2020-09-01 12:48:58
【问题描述】:
我遇到了与here 解释的完全相同的问题。不幸的是,我不明白究竟是什么改变来解决这种情况。 OP 是否提示 Swift 灵活数组成员的大小以使其在 Swift 中可见? OP是否修改了C库?我想避免这样做。
我在 Swift 中使用了一个 C 库,它返回一个结构体,最后带有一个灵活的数组成员“mbody”。
typedef struct {
size_t size;
char mbody[];
} msg
在 Swift 中,当返回这个结构时,我可以访问属性“size”,但不能访问属性“mbody”。我已经确认 mbody 设置正确。初始化 C 结构的代码的简化版本在这里:
const size_t mem_size = msgcount * MSGBOX_SIZE;
msg* ret = malloc(sizeof(msg) + mem_size);
if (!ret)
return NULL;
ret->size = mem_size;
memcpy(ret->mbody, msgrecord, MSGBOX_SIZE);
为什么 Swift 没有获取 msg->mbody 的大小?它是编译器设置吗?我将其设置为 C99。
【问题讨论】:
-
您链接的问题的答案及其上的 cmets 表明选择的解决方案是声明成员数组的大小,使其不再是 FAM。我不相信 OP 或那里的回答者完全理解发生了什么,但将 FAM 更改为普通数组成员可以解决问题也就不足为奇了。
-
我对 Swift 不太熟悉,尤其是它的 C 互操作功能,但如果它根本不提供对 FAM 的访问,我不会感到惊讶,至少不提供对 FAM 的访问。我没有看到任何通用的方法来做到这一点。
标签: c swift pointers memory c99