我正在尝试将结构写入文件,然后读取它。该结构包含两个元素:
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函数有问题吗?