在 C 中,在遗留代码中可能会遇到“零长度数组”的情况。这涉及包含长度为零的数组的结构。虽然警告被编译指示抑制,但创建包含此类数组的新结构可能会导致错误 2233。为什么会发生这种情况,可以采取什么措施来解决它?
使用零长度数组的原因是一个历史原因允许动态分配数组的 C hack。开发人员不使用长度为 1 的数组或指针,而是创建一个长度为零的数组的结构。这将允许他们使用结构体的 nData 成员动态计算数组的大小。
为了纠正这个问题,可以使用 C-Hack。可以创建函数 mallocSomeData 来动态分配指定长度的数组:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
通过该函数,可以创建一个someData的对象,并包含所需长度的数组,有效解决“零长度数组”问题。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3