我在文件中有某些数据,并希望将其存储到C中的结构数组中。我能够获取数据但是当我将其设置为struct数组时,每个元素都被替换为相同的数据。
任何人都可以帮我读取数据并将其存储到结构数组中。
我的代码段如下:
int main(){
FILE * inp;
char a[20],b[20],c[20],d[20],e[20],f[20];
struct CD s;
struct CD cdList[4];
int i=0;
inp = fopen("data.txt", "r");
if(!inp)
{
printf("Unable ot open file\n");
}
while (fscanf(inp,"%s %s %s %s %s %s",&a,&b,&c,&d,&e,&f) != EOF)
{
//printf("%d",i);
setCD(&cdList[i],a,b,c,d,e,f);
//cdList[i]=s;
printCD(&cdList[i]);
i=i+1;
}
//getTopRating(cdList);
system("PAUSE");
return 1;
}
/*set function*/
void setCD(struct CD * cd,char artist[] ,char title[],char year[],char genre[],char rating[], char fan[]){
cd->Artist=artist;
cd->Title=title;
cd->Year=year;
cd->Genre=genre;
cd->Rating=rating;
cd->Fan=fan;
}
/*print structure*/
void printCD(struct CD *cd){
printf("%s %s %s %s %s %s \n",
cd->Artist,
cd->Title,
cd->Year,
cd->Genre,
cd->Rating,
cd->Fan
);
}
struct CD{
char* Artist;
char* Title;
char* Year;
char* Genre;
char* Rating;
char* Fan;
};
答案 0 :(得分:2)
由于您的数据是字符串,仅仅复制指针并不好。由于所有cd->Artist
都指向同一位置a
(位于main()
)。
而不是
cd->Artist=artist;
你应该做
cd->Artist = strdup(artist);
对要存储的所有字符串类型成员执行此操作。