【问题标题】:Array declaration of size one大小为一的数组声明
【发布时间】:2017-02-10 08:49:31
【问题描述】:

遍历 Zend 源代码中的 'zval' 结构,我看到了这个: // zend_types.h

struct _zend_string {
   zend_refcounted_h gc;
   zend_ulong        h;                /* hash value */
   size_t            len;
   char              val[1];
};

这个结构是用来存储字符串的,但是'char val[1]'看起来很别扭怎么用?

【问题讨论】:

  • 搜索“灵活数组”或“结构黑客”。
  • 你能把接下来的几行代码贴出来吗?我有一种感觉 val 在这个结构之后继续。
  • @BlagovestBuyukliev the struct hack。这就是我一直在寻找的短语。
  • @BlagovestBuyukliev 我认为 SO 上有重复,但我认为这不是那个问题。
  • @enamel 如果认为值得删除,则不需要删除它。大多数情况下,它只是获得指向另一个问题的链接,因此,如果有人首先遇到这个问题,它会被重定向

标签: php c zend-framework


【解决方案1】:

这样的东西用于在编译时访问长度未知的数组。结构从malloc 获取内存,其大小大于结构。所以数组可以用来访问多余的内存。 len保持限制很重要。

奇怪的是它是一个 1 元素数组,在 c99 中引入可变长度数组 (val[]) 之前,0 元素数组很常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多