用C编写和读取struct数组

时间:2019-07-18 18:57:14

标签: c struct fwrite fread

我正在尝试将结构写入文件,然后读取它。该结构包含两个元素:

struct person {
    int id;
    char name[10];
};

这是我的main()函数,可以正常工作:

int main ()
{
    FILE *fp;

    fp = fopen ("person.dat", "w+");
    if (fp == NULL)
    {
        fprintf(stderr, "\nError with opening the file\n");
        exit (1);
    }

    struct person input[2];
    struct person output[2];

    input[0].id=1;
    strcpy(input[0].name, "AAA");
    input[0].name[3]='\0';
    input[1].id=2;
    strcpy(input[1].name, "BBB");
    input[1].name[3]='\0';

    // write struct to file
    if( (fwrite(input, sizeof(struct person), 2, fp))!=2)
        printf("Error with writing to file!\n");
    //move to the beginning of the file
    fseek(fp, 0, SEEK_SET);
    //read struct from file
    if( (fread(output, sizeof(struct person), 2, fp))!=2)
        printf("Error with reading from file!\n");
    printf ("id = %d name = %s \n", output[0].id, output[0].name);
    printf ("id = %d name = %s \n", output[1].id, output[1].name);
    // close file
    fclose (fp);

    return 0;
}

但是,我想使用循环来初始化元素。因此,我使用了for循环来执行此操作,而不是一个一个地初始化它们:

for(i=0; i<2; i++)
{
    input[i].id=i;
    strcpy(input[i].name, "AAA");
    input[i].name[3]='\0';
}

不幸的是,如果我使用for循环,则会收到一条消息:从文件读取时出错! 数组的第一个元素的值正确(id = 0,名称= AAA),但是第二个元素具有一些随机值。我看不出为什么使用for循环而不是分别初始化每个元素会影响从文件读取的原因。可能是我的fread或fwrite函数有问题吗?

0 个答案:

没有答案