知识点:
在文件进行读或写时,在文件句柄内部,关联有一个指示读或写位置的偏移指针(不妨记为:offset),
该偏移指针(offset)的值,确定了当前读或写的位置.在写文件时,该值会自动被修改(增加值是写入的字节数量).
你问题详解:
fp = fopen("data.dat","w+b");//此时偏移指针(offset)的值=0
fwrite(&a[0],sizeof(int),1,fp);//这句将第0个元素值(1)写入文件.此时偏移指针(offset)的值=4(这里sizeof(int)=4,4*1=4,下同)
for (i=1;i<6;i++)
{
fseek(fp,0L,0);//此时偏移指针(offset)的值=0,即又指到文件的开始位置了
fwrite(&a[i],sizeof(int),1,fp);//将第i个元素写入文件,因为偏移指针指到文件的开始位置,上一个值将被覆盖,此时偏移指针(offset)的值=4
}
//for语句结束后,文件中只写入了最后一个整数,即6(而不是123456)
fseek(fp,0L,0);//此时偏移指针(offset)的值=0
fread(&k,sizeof(int),1,fp);//读取到的是最后一个整数,即6
小结:
该问题是不了解文件偏移指针引起,另外,在写文件时(fwrite),一般情况下不使用fseek
你查下fseek(fp, 0, 0)是什么意思 你就明白了。