我正在对一些旧代码进行重构,并找到了一些包含零长度数组的结构(如下所示)。当然,pragma抑制了警告,但我未能创建包含此类结构的“new”结构(错误2233)。数组“bydata”用作指针,但为什么不使用指针呢?或者长度为1的数组?当然,没有任何评论让我喜欢这个过程…
有什么理由用这种东西吗?有什么重构建议吗?
struct someData
{
int nData;
BYTE byData[0];
}
这是C++,WindowsXP,VS 2003
最佳答案
是的,这是个黑客。
要创建任意长度的数组,请执行以下操作:
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对象,它具有指定长度的数组。
关于c++ - 零长度数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24079299/