2012-02-27 1 views
2

У меня есть набор структур, которые я хочу сохранить внутри анонимной структуры-члена. Каждая небольшая структура выглядит так:Как сохранить массив структур внутри анонимного пользователя?

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 
    } 

, и я хотел бы сохранить это в j-го элемента таблицы, например 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); 
} 

Я думаю, что я ужасно искалечил этот, и мне нужна помощь, распутывая его!

+1

'typedef' является вашим другом. –

+0

как декларировать. искать bufData, это глобальная переменная? кучи? стек? –

+0

Это элемент стека, который уникален для каждой таблицы [j] struct. – Rio

ответ

2

Поскольку 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; 

с декларированием и типа, и переменная WOF что тип:

struct aStruct 
{ 
... 
} aVariable; 
+0

Это дает мне 'test.c: 120: 22: error: 'struct ' не имеет имени с именем 'bufData'' для обеих опций (и я проверил синтаксис). – Rio

+0

Итак, я перехожу к объявлению как типа, так и переменной, а таблица контейнеров в таблице жалуется, что 'tests.c: 44: 19: ошибка: ожидаемый идентификатор или '(' before '[' token' ... – Rio

+0

отредактирован снова, извините. – vulkanino