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

时间:2013-09-20 12:29:32

标签: 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")) != 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中的数据加载到现有结构中,如果文件不存在则使用已定义的默认值?

1 个答案:

答案 0 :(得分:1)

不需要“&”在:

fscanf(in,"%s", &data[i].name);

如果没有打开,则无需关闭文件流。

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;