c - 在 C 中使用函数返回结构数组

标签 c arrays file-io struct

我在一个文件中有某些数据,想将它存储到 C 中的结构数组中。我能够获取数据,但是当我将它设置为结构数组时,每个元素都被相同的数据替换。

谁能帮我读取数据并将其存储到结构数组中。

我的代码片段如下:

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;
};

最佳答案

由于你的数据是字符串,仅仅复制指针是不好的。因为所有 cd->Artist 都将指向相同的位置,即 a(在 main() 中)。

代替

cd->Artist=artist;

你应该做的

cd->Artist = strdup(artist);

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

关于c - 在 C 中使用函数返回结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22678521/

相关文章:

java - 使用 ActionListener 将文件读入 JTextArea

c - Malloc/Realoc 错误的内存大小和值

c++ - 从数组映射到整数在 C++ 中无法正常工作

javascript - 依次解决 Promise 会导致错误

将字符缓冲区连接成字符串

java - 如何使用java从二进制文件中读取双字?

java - 使用 Java 将字体写入磁盘(.ttf 文件)

c - 插入数组到文件错误

c - 使用分治法获得数组的第二大元素

c - 如何在c中创建文件的精确副本