美文网首页
C语言中变长数组--struct hack

C语言中变长数组--struct hack

作者: 心理健康最重要 | 来源:发表于2020-03-27 17:48 被阅读0次

    struct hack 是一种用来实现变长数组的常见技巧,不必再构造时就确定数组的长度,延迟到运行时确定。

    c标准中的描述

    As a special case, the last element of a structure with more than one named member may
    have an incomplete array type; this is called a flexible array member.

    c99standard

    c89:通过struct hack 实现变长数组

    struct DynamicStr{
              int length;
              int free;
              char str[0];
    };
    char* DynamicStrNew(const void* init_str,size_t init_len){
              struct DynamicStr*  p;
              if(init_str&&init_len>=0)
                    p = (struct DynamicStr*)malloc(sizeof(struct DynamicStr)+len+1);
             else
                    return NULL;
             if(!p)  return NULL;
             p->length = len;
             p->free =  0;
             memcpy(p->str,init_str,init_len);
             p->str[init_len]  = '\0';
             return p->str;
    }
    

    DynamicStr结构体的大小在32bit下位8字节;

    在c99中引入了variable-length array(VLA)

    int n;
    scanf("%d",&n);
    char str[n];

    相关文章

      网友评论

          本文标题:C语言中变长数组--struct hack

          本文链接:https://www.haomeiwen.com/subject/jumckhtx.html