大家好,我用fwrite()和fread()函数时发现一个奇怪的问题
是这样的,我用fwrite()把一个int型数组里写入到一个非二进制文本中,然后用fread()函数读出,数组的数为特定的一系列值后,会对输出产生干扰,比如本来读出10*(sizeof(int))大的内存数据后,文件内部指针本应该移到39处(int为4字节大小)但结果却是会直接跳到179处 下面是源码,大家有兴趣可以试试,我就想搞清楚这到底是什么原因
#include <stdio.h> #include <stdlib.h> #include<string.h> #define N 5 int main() { FILE *fpFile; int nArray[10]={1,2,3,4,5,6,7,8,9,10}; int offSet; int i ,j,temp; int r; int w; long flen; if((fpFile=fopen("data.txt","w"))==NULL) { printf("Open file failed!\n");exit(0); } for(j=0;j<N;j++) { i=0; while(i<10) { nArray[i]+=10; i++; } w=fwrite(nArray,sizeof(int),10,fpFile); } fclose(fpFile); //写入完成 //开始读出并输出 if((fpFile=fopen("data.txt","r"))==NULL) { printf("Open file failed!\n");exit(0); } flen=ftell(fpFile); printf("\n%ld\n",flen); while(!feof(fpFile)) { memset(nArray,0,sizeof(nArray)); if(r=fread(nArray,sizeof(int),10,fpFile)) { printf("\n%d\n",r); flen=ftell(fpFile); /* 得到大小 */ printf("\n%ld\n",flen); i=0; while(i<10) { printf("%6d",nArray[i]); i++; } printf("\n"); } else break; } //此处直接测试读第四个块,可以发现读出正常 printf("\nread the data of block 4:\n"); offSet=3*(sizeof(int)*10 );//即要读第四块 fseek(fpFile,offSet,SEEK_SET); fread(nArray,sizeof(int),10,fpFile); printf("\n"); i=0; while(i<10) {printf("%6d",nArray[i]);i++;} printf("\n"); fclose(fpFile); return 0; }