gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:50:04 25 4
gpt4 key购买 nike

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

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;

最佳答案

如果希望变量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;
}

输出:

123456789

关于c - 如何在静态声明期间在结构中指定灵活的数组成员大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com