c++ - 零长度数组

标签 c++ arrays visual-c++ flexible-array-member

我正在重构一些旧代码,发现很少有包含零长度数组的结构(如下)。当然,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/

相关文章:

c++ - 逻辑错误,需要协助

c++ - 没有模板参数的模板类的容器

arrays - node.js 在 Intervall 中迭代数组一定次数

java - 返回匹配数组值的索引总和

javascript - 在没有 getJSON 的情况下从 Javascript 中的枚举 JSON 子数组中检索数据

c# - 如何在 C# 中将 byte[] 转换为 sbyte*?

c++ - 二维矩阵

c++ - 检查文件是否在应用程序外被修改

c - Visual C++ 无法识别注释行?

c++ - Visual Studio 2010 C++ SDL 游戏可以在编译它的计算机上运行,​​但不能在任何其他计算机上运行