2012-02-27 13 views
2

私は匿名メンバー構造体の内部に格納したい構造体のセットを持っています。小さな構造体は次のようになります。匿名メンバー内に構造体の配列を格納する方法は?

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

実際には8つの要素しかありません。 、

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

と私は表のj番目の要素でこれを保管したいと思います:

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

データが現在のような入力されている:私は、次のような、別の構造体の内部でこれを含めますテーブル[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

これは、すべてのTable [j]構造体に固有のスタック要素です。 – 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 
{ 
... 
} aVariable; 

タイプと変数WOFの両方を宣言すると:無名の構造型の変数を宣言すると

struct aStruct 
{ 
... 
}; 

:構造体を宣言するとき は、タイプを宣言混同しないでくださいそのタイプ:

struct aStruct 
{ 
... 
} aVariable; 
+0

'test.c:120:22:error: 'struct 'には、両方のオプションで 'bufData'という名前のメンバーがありません(構文もチェックしました)。 – Rio

+0

したがって、私は型と変数の両方を宣言しています。コンテナの構造体テーブルは 'tests.c:44:19:error:expected identifier 'または'( 'before' ['token' ... – Rio

+0

、 – vulkanino