我正在对一些旧代码进行重构,并找到了一些包含零长度数组的结构(如下所示)。当然,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/

10-12 17:27