• ベストアンサー

ファイル操作(構造体)のエラー?なんでしょうか?

ファイル操作(構造体)のエラー?なんでしょうか? テキストファイルtestdata.txtから読み込んで渡したいのですが 下記の画像のようなエラーがでます。 プログラムの問題ですか?パソコンのほかの問題ですか? DOSのWindowがまずいのでしょうか? testdata.txtの中身は半角英数字の羅列です。 例 123 456 789 AAA BBB #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct data{ char *name; int a; int h; struct data *next; }LIST; int main(){ int i; int j; LIST *pt; FILE *fp; char *readLine; if((fp=fopen("testdata.txt","r"))==NULL){ printf("file error\n"); exit(1); } pt=(LIST *)calloc(4,sizeof(LIST)); i=0; j=0; while(fgets(readLine,256,fp)!=NULL){ if(i==0){ (pt+j)->name=(char *)malloc(strlen(readLine)+1); (pt+j)->name=readLine; printf("%s",(pt+j)->name); i++; }else if(i==1){ (pt+j)->a=atoi(readLine); printf("%d",(pt+j)->a); i++; }else if(i==2){ (pt+j)->h=atoi(readLine); printf("%d",(pt+j)->h); i=0; j++; } } free(pt); return 0; } コンパイルは無事終了してます。

質問者が選んだベストアンサー

  • ベストアンサー
  • os6v100i
  • ベストアンサー率44% (16/36)
回答No.1

readLine、確保してないように見えますが・・・ 未初期化のポインタ(おそらくNULL)に書き込んだ事によるエラーかと

その他の回答 (2)

noname#130082
noname#130082
回答No.3

下の人々と同じです。 readLineが初期化されていません。 mallocで領域確保するか、readLineを配列にした方がいいと思います。 以下蛇足: できれば、256という生の数字を使うより、 #define MAX_LENGTH 256 などと名前付けしておいて、 char readLine[MAX_LENGTH]; などとしておけば、マクロの値を変えることで、一行の長さの最大値が変化した場合にも対処できるので、より柔軟なプログラムになると思います。 あと、fopenした後は最後はfcloseした方がよいかと。

回答No.2

No.1様に一票。 readLineに実体がなしってことで。 char readLine[256];とかでいいと思う。 ではでは。