2011-03-01 18 views
0

ちょっと、私はCプログラムを書いています。構造体の配列をmallocしてファイルのデータで埋めたいと思っています。ここでは、構造体のための私のtypedefです:構造体フィールドがメインで宣言されていません

typedef struct { 
    char name[5]; 
    int age; 
} person; 

そして、私はこれを行う私の主な機能に:私がコンパイルしようとすると

person *A ; 
    int i ; 
    FILE * fin; 

    fin = fopen("people", "r"); 

    A = (person *) malloc(sizeof(person) * 10); 
    if (A == NULL) { printf("Error mallocing \n") ; return -1 ; } 

    for(i = 0; i < 10; i++) { 

    fscanf(fin, "%s %d", name->A[i], age->A[i]); 

    } 

今、残念ながら私は名前と年齢がメインで宣言されていないされていることをエラーが出ます。私は前にfscanfを使って構造体を作ってみたことはありませんでしたが、ここでは少し損失があります。何かを知っている人に事前に感謝します!

+0

あなたが 'malloc'である構造体の数をハードコーディングするなら、どうしてそれらを静的に宣言しないのですか? – bta

+0

ちょうどプレースホルダーコード、私は実際には – Nick

+0

@ btaの数字をハードコードするつもりはないと思います。それは単なる例か試行であり、カウントは最終コードで可変になるでしょう。 –

答えて

5

あなたは誤って構文を受け取りました(これは、ポインタと実際の構造体を返すインデックスではなく、ポインタではなく、メンバーオペレータ->へのポインタは必要ありません)。A[i].name&(A[i].age)です。 fopenからの戻り値もチェックすることをお勧めします。

+0

ええ、それはトリックでした。どうもありがとうございました。 – Nick

関連する問題