C 仅当文件存在或使用默认值时,才将文件内容加载到结构中

C 仅当文件存在或使用默认值时,才将文件内容加载到结构中,c,arrays,struct,structure,C,Arrays,Struct,Structure,我有以下代码: typedef struct my_data { char* name; }my_data; my_data data[]={ { .name = "Peter" }, { .name = "James" }, { .name = "John" }, { .name = "Mike" } }; void loaddata() { FILE * in; if((in = fopen("data.txt","rt")) != N

我有以下代码:

typedef struct my_data {
 char* name;
}my_data;

my_data data[]={
    { .name = "Peter" },
    { .name = "James" },
    { .name = "John" },
    { .name = "Mike" }
};


void loaddata()
{
    FILE * in;
    if((in = fopen("data.txt","rt")) != NULL) {
        printf("start loading\n");
        int i = 0;
        while(!feof(in))
        {
            fscanf(in,"%s", &data[i].name);
            printf("%s\n",data[i].name);
            i++;
        };
    }
    else
        printf("loading not required\n");
    fclose(in);
}
这给了我一个“被杀”的错误

如何将文件data.txt中的数据加载到现有结构中,并且在文件不存在的情况下使用已定义的默认值?

无需“&”:

如果文件流未打开,则无需关闭它

void loaddata()
{
    FILE * in;
    if((in = fopen("data.txt","rt")) != NULL) {
        printf("start loading\n");
        int i = 0;
        while(!feof(in))
        {
            fscanf(in,"%s", data[i].name);
            printf("%s\n",data[i].name);
            i++;
        };
        fclose(in); /* need closing */
    }
    else
        printf("loading not required\n");
    /* no need closing */
}
UPD:使用分配的内存创建结构,而不是指针。指针访问程序的一部分,而不是内存,所以您不能将数据保存在那个里

typedef struct my_data {
    char name[10];
}my_data;

w\o&I获得分段故障移动关闭(in);如果{}我使用的是较旧版本的gcc,但该程序必须与任何兼容,对吗?对不起,“killed”错误是由于放错位置close()引起的。fscanf(在“%s”中,&data[i].name);使用是正确的。另外,在从文件读取和保存到结构之间使用临时vaiable。如果文件存在,我仍然会收到终止错误,否则它会工作
typedef struct my_data {
    char name[10];
}my_data;