2010-12-04 4 views
1

私のコードでmallocを適用しようとしていますが、まだ問題があります。「構造体または共用体ではないメンバーのIDを要求しています」というエラーがあります。問題malloc

アレイの代わりにmallocを使用し、各インデックスに構造体を格納することです。配列[i] - > idを試しましたが、テキストファイルに保存されたガベージ文字の束です。私は私とループを使用していない、だってユーザーのみ入力が一度...これは私のコードであることもインクリメント:

#include<stdio.h> 
#include<stdlib.h> 
struct studentinfo{ 
     char id[8]; 
     char name[30]; 
     char course[5]; 
}s1; 
main(){ 
    int i=0; 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+");  
    struct studentinfo *array[50]; 

    array[i] = (struct studentinfo*) malloc(sizeof(struct studentinfo)); 
     printf("Enter Student ID: "); 
     scanf("%s", array[i].id); 
     fflush(stdin); 
     printf("Enter Student Name: "); 
     gets(array[i].name); 
     fflush(stdin); 
     printf("Enter Student Course: "); 
     scanf("%s", array[i].course); 

     fprintf(stream, "\n%s,\t%s,\t%s", array[i].id, array[i].name, array[i].course); 
     i++; 
     fclose(stream); 
     free(array); 
    getch(); 
} 

は、あなたが私を助けることを願って...事前に感謝を:)

+0

'fflush(stdin)'は未定義の動作を呼び出します。 –

+0

そしてgets()関数を変更してください "QUOTE"これはバッファオーバーフローを作成する悪魔のツールです "... http://stackoverflow.com/questions/4346598/gets-function-in-c – newbie

+0

あなたはStudentInfoの配列、またはStudentInfoへのポインタの配列を作成したかったのですか?あなたは後者をしたので、前者を望んでいたようです。 –

答えて

3

あなたは配列を初期化して次のように解放する必要があります。Am i using malloc properly?
また、Zurahnの指示に従ってください。

+0

良い点(彼が尋ねてきた問題ではないが、それにもかかわらず問題を解決しなければならない) –

+1

eiクラスメート.. Zurahnの指示に従ってください。それは正解です。 – newbie

+0

fclose(stream); if(array [i]!= NULL){ free(array);}これは配列を解放するために使用するものです... thnx – iamanapprentice

5

プロパティに誤ってアクセスしています。

array[i]

構造体へのポインタですので、

array[i].id

はあなたにエラーを与えるために起こっています。間接参照に

array[i]->id

を使用してください。

+0

私は配列[i] - > idを使用してnewbieのようにスペースを解放します。 .thnx guyz – iamanapprentice