如何在静态声明期间在struct中指定灵活的数组成员大小

时间:2018-03-10 18:52:16

标签: c

考虑以下定义,我们为其最后一个属性指定一个具有灵活数组成员的结构。

typedef struct cache_s
{
    int length;

    char data[];
} cache_t;

通常情况下,我们可以动态地在运行时配置data的大小,其中n的大小为data

cache_t* my_dynamic_cache = malloc(sizeof(cache_t) + sizeof(char)*n);

但是,当我们对变量进行静态分配时,我们将如何指定相同的东西呢?

cache_t my_static_cache;

1 个答案:

答案 0 :(得分:1)

如果要在堆栈上分配变量AND NOT column_default LIKE 'nextval%' ,则无法使用灵活大小的数组成员cache_t s;,因为无法为其分配内存。

无法修改数组基址,数组基址是常量指针。

char data[];

你必须使用 my_static_cache.data = malloc(100); // it would fail for char data[] 的'经典'方法,你肯定已经知道了:

char *data;

输出:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct cache_s
{
    int length;  
    char *data;
} cache_t;

int main(void)
{
    cache_t my_static_cache;
    char  *str  = "123456789";

    my_static_cache.data = malloc(100);
    strcpy(my_static_cache.data,str);

    printf("%s",my_static_cache.data);
    return 0;
}