セグメンテーション違反
環境はLinux・C言語です。
#include<stdio.h>
#include<string.h>
struct book{
char author[256];
char title[256];
char publisher[256];
int year;
};
int main(void);
int main(void)
{
FILE *fp1,*fp2;
struct book data[256]={0},dummy={0};
char author[256];
char title[256];
char publisher[256];
int year;
int i=0,j=0;
fp1=fopen("biblio.txt","r");
while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){
strcpy(&data[i].author[0],author);
strcpy(&data[i].title[0],title);
strcpy(&data[i].publisher[0],publisher);
data[i].year=year;
i++;
}
j=i;
fclose(fp1);
while(1){
for(i=0;i<256;i++){
if(data[i].year > data[i+1].year){
dummy=data[i];
data[i]=data[i+1];
data[i+1]=dummy;
break;
}
}
if(i==256) break;
}
fp2=fopen("biblio2.txt","w");
for(i=0;i<j;i++){
fwrite(&data[i],sizeof(struct book),1,fp2);
}
fclose(fp2);
return(0);
}
以上のソースで、セグメンテーションエラーが出ます。
問題は while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){ の部分だとは思うのですが、どう改善すればいいのかわかりません。
どなたかわかる方お願い致します。
ちなみに、biblio.txtの内容は
B.W.Kernighan & D.M.Ritchie,The C Programming Language,Prentice Hall,1988
H.M.Deitel & P.J.Deitel,C How to Program,Prentice Hall,2001
J.R.Hanly & E.B.Koffman,Problem Solving and Program Design in C,Addison-Wesley,2002
D.M.Etter,Introduction to C,Prentice Hall,1999
H.H.Tan & T.B.D'Orazio,C Programming for Engineering and Computer Science,McGraw-Hill,2000
です。
お礼
回答ありがとうございます。 試しにNO.3さんのプログラムで実行したらきちんと動作しました。 なので、そのプログラムを参考にして自分なりに考えたいと思います。