c - 使用 mmap() 如何创建动态大小的结构

标签 c dynamic struct mmap

您好,我有以下情况

#define CONSTANT 10

struct structA{
    int var1;
    int var2[CONSTANT];
};

main(){
    structA *varA = NULL;
    int i;

    /* some C code */


    varA = mmap(0,..);
    for(i = 0; i < CONSTANT; i++){
        varA.var2[i] = /* C code */ ;
    }

    /* C code */

}

此处structAvar2数组中的元素个数是常量,因此可以直接引用varA.var2[i]。但是如果要在运行时动态确定数字CONSTANT,应该如何修改结构体定义?

最佳答案

最干净的方法是使用 C99 灵活数组成员:

struct structA{
    int var1;
    int var2[];
};

然后你可以mmap(NULL, sizeof(int) * (num + 1), ...)。只是要小心灵活的数组成员,sizeof 对他们的行为很有趣(不包括他们的大小)。

如果您不能/不会使用灵活的数组成员,您可以使用指针代替数组,并为它单独使用 mmap 内存。

关于c - 使用 mmap() 如何创建动态大小的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533160/

相关文章:

c# - 什么是 C fread() 的 C# 模拟?

c - 如何通过 DirectFB 使用鼠标

php - CakePHP 中的动态路由

c++ - Ncurses c/c++ - getstr() 未声明的 char 数组

c - 我如何更正这个程序(结构和指针(?))?

c - 结构内部的结构 : to point or not to point?

java - Java Arrays.binarySearch 方法的 C 实现

c - C 中的 %d 内部变量文件名

java - 在java代码中使用相对布局

c - 如何在结构中正确使用指针?