考虑以下定义,我们为其最后一个属性指定一个具有灵活数组成员的结构。
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;
答案 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;
}