arrays - 灵活数组成员使用无效错误

标签 arrays c struct typedef declare

typedef struct {
        void *end;
        void *start;
        int size;
        int arrs [];
        } st;


void *doStuff(void *starter, void *ender) {
    st *s = (st *) malloc(sizeof(st));
    s->end = ender;
    s->start = starter;
    int sayz = 1;
    s->size = (int) (ender - starter);
    int a [s->size];
    memset(a, 0, sizeof a);
    s->arrs = a; // This line gives error
    return s;
    }

行“st->arrs = a;”给我“灵活数组成员的无效使用”错误。有谁知道如何在结构中保存数组?语言是C

最佳答案

这就是您想要的,假设 starterender 指向 char 对象。我还清理了您的缩进和格式。

typedef struct {
    void *end;
    void *start;
    ptrdiff_t size;  // Note that a diff of pointers should be a ptrdiff_t
    int arrs[];
} st;

st *doStuff(void *starter, void *ender) {
    ptrdiff_t size = (char*)ender - (char*)starter; // Calculate size first so it's available to use in malloc
    st *s = malloc(size + sizeof st);
    s->end   = ender;
    s->start = starter;
    s->size  = size;
    memset(s->arrs, 0, size * sizeof s->arrs[0]); // since array is allocated, no need to create a redundant array
    return s;
}

关于arrays - 灵活数组成员使用无效错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71273093/

相关文章:

Java-Tile map 图像闪烁-我该怎么做才能阻止这种情况?

javascript - 字典多项选择

c - 使用可变宏和函数时为 "Uninitialised value was created by a stack allocation"

c - 带有可选文本的 Scanf

c++ - GSL-GNU 中的矩阵乘法

c - 段错误: 11 Pointers and Structures

c - 为链表数组分配内存

ruby - 在一行中创建多个数组

C:使用memcpy创建数组的数组

swift - 如何从格式化字符串中填充结构对象?