使用C中的函数返回struct的数组

时间:2014-03-27 04:47:16

标签: c arrays file-io struct

我在文件中有某些数据,并希望将其存储到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;
};

1 个答案:

答案 0 :(得分:2)

由于您的数据是字符串,仅仅复制指针并不好。由于所有cd->Artist都指向同一位置a(位于main())。

而不是

cd->Artist=artist;

你应该做

cd->Artist = strdup(artist);

对要存储的所有字符串类型成员执行此操作。