【问题标题】:How to store an array of structs inside anonymous member?如何在匿名成员中存储结构数组?
【发布时间】:2012-03-16 19:18:29
【问题描述】:

我有一组要存储在匿名成员结构中的结构。每个小结构体如下所示:

static struct {
    uint16_t buf[256];
} bufData[8];

我知道它只有 8 个元素。我想将它包含在另一个结构中,例如:

static struct {
    int size;
    // I am not sure how to proceed
    //char * bufData;
    //struct * bufData;
} Table[MAX_FILES];

目前正在这样输入数据:

  for (int i = 0; i < 8; i++) {
        loadData(i,bufData[i].buf);
        printf("%s\n", bufData[i].buf); // This works
    }

我想将它存储在 Table 的 jth 元素中,例如 Table[j].bufData。目前我已经尝试过

memset(bufData, 0, sizeof(bufData));
Table[j].size = 256;
Table[j].bufData = &bufData;

然后解压,还是不行。

char * test = Table[j].bufData;
for (int i = 0; i < 8; i++) {
    printf("%s\n", test[i].buf);
}

我想我把这个弄坏了,我需要一些帮助来解开它!

【问题讨论】:

  • decl.找bufData,是不是全局变量?堆?堆栈?
  • 这是一个栈元素,对于每个 Table[j] 结构都是唯一的。

标签: c struct c99


【解决方案1】:

由于bufData 是一个结构,您应该将其存储为bufData 指针(不是char 指针),或者简单地存储为bufData 的数组:

struct BufData /* this declares a type, not a variable */
{
    uint16_t buf[256];
};

选项 1:

static struct 
{
    int size;
    struct BufData* myBufData;
} Table[MAX_FILES];

选项 2:

static struct 
{
    int size;
    struct BufData myBufData[8];
} Table[MAX_FILES];

编辑: 声明结构时,不要混淆声明类型:

struct aStruct
{
...
};

声明一个具有未命名结构类型的变量:

struct 
{
...
} aVariable;

同时声明该类型的类型和变量:

struct aStruct
{
...
} aVariable;

【讨论】:

  • 这两个选项都给了我test.c:120:22: error: 'struct &lt;anonymous&gt;' has no member named 'bufData'(我检查了语法)。
  • 所以我去声明类型和变量,容器结构表抱怨tests.c:44:19: error: expected identifier or '(' before '[' token ...
  • 我似乎无法访问Table[j].myBufData[i].buf 来存储数据,例如memcpy(Table[j].myBufData[i].buf, buf, SOME_SIZE)——我错过了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2017-06-11
  • 2019-04-15
相关资源
最近更新 更多