我正在重构一些旧代码,发现很少有包含零长度数组的结构(如下)。当然,pragma 抑制了警告,但我未能通过包含此类结构的"new"结构创建(错误 2233)。数组'byData'用作指针,但为什么不使用指针呢?或长度为 1 的数组?当然,没有添加评论让我享受这个过程...... 使用这种东西有什么原因吗?在重构这些方面有什么建议吗?
struct someData
{
int nData;
BYTE byData[0];
}
注意是 C++、Windows XP、VS 2003
最佳答案
是的,这是一个 C-Hack。
创建任意长度的数组:
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/