C/C++语言之由数字26引起的文件的数据保存与读取调试。

首先在VS2010中遇到的问题是,建立了一个结构体

struct position{

int x;

int y;

};

然后用此结构体声明一个数组rout[8];

for(int i=0;i<8;i++)

rout[i]=i+25;

然后把结构体数据存储到文件中

fwrite(&rout[i],sizeof(position),1,fp);

从文件中直接观察到的字节数为sizeof(position)*8,但是读取数据时

fread(temp,sizeof(position),1,fp);

并不能读取到文件的结尾处就结束。

后来发现是读取到rout[i].x=26时就结束。

问题1,读到这个26就结束的原因是什么?

在验证过程中,有以下代码

include"Stdafx.h"

#include

#include"atlstr.h"

using namespace std;

int rout[10];

void main()

{

int t=0;

int temp;

for(int i=0;i<10;i++)

rout[i]=i+25;

FILE *fp=fopen("rout_list13.txt","w");

for(int i=0;i<10;i++)

fwrite(&rout[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("rout_list13.txt","r");

while(t<10)

{

fread(&temp,sizeof(int),1,fp);

printf("%d",temp);

t++;

}

fclose(fp);

}

发现输出的结果一直是

C/C++语言之由数字26引起的文件的数据保存与读取调试。

问题2:问什么会出现值不变的情况?

对以上代码做以下更改

include"Stdafx.h"

#include

#include"atlstr.h"

using namespace std;

int rout[10];

void main()

{

int t=0;

int temp;

for(int i=0;i<10;i++)

rout[i]=i+6;

FILE *fp=fopen("rout_list13.txt","w");

for(int i=0;i<10;i++)

fwrite(&rout[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("rout_list13.txt","r");

while(t<10)

{

fread(&temp,sizeof(int),1,fp);

printf("%d",temp);

fread(&temp,sizeof(int),1,fp);

printf("%d",temp);

t++;

}

fclose(fp);

}

可以看到出现这样的结果

C/C++语言之由数字26引起的文件的数据保存与读取调试。

首先分析数组存在10个数从6到15结束,但是读取了20次,当读取到结尾处时数据一直不变。

include"Stdafx.h"

#include

#include"atlstr.h"

using namespace std;

int rout[10];

void main()

{

int t=0;

int temp;

for(int i=0;i<10;i++)

rout[i]=i+20;

FILE *fp=fopen("rout_list13.txt","w");

for(int i=0;i<10;i++)

fwrite(&rout[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("rout_list13.txt","r");

while(t<10)

{

fread(&temp,sizeof(int),1,fp);

printf("%d",temp);

fread(&temp,sizeof(int),1,fp);

printf("%d",temp);

t++;

}

fclose(fp);

}

结果是

C/C++语言之由数字26引起的文件的数据保存与读取调试。

所以由以上的调试过程可以得到以下结论当文件数据读取结束后,在对文件进行读取时值为最后读取的结果并保持不变,可以回答问题2.

继续讨论问题1,通过用fseek函数进行定位,发现26这一个数在文件中占用4个字节的数据。

后面百度了一下26的文件读取问题,得到了解决的方法。

在向文件中写或读数据时用二进制进行表示。代码如下

include"Stdafx.h"

#include

#include"atlstr.h"

using namespace std;

int rout[10];

void main()

{

int t=0;

int temp;

for(int i=0;i<10;i++)

rout[i]=i+24;

FILE *fp=fopen("rout_list13.txt","wb");

for(int i=0;i<10;i++)

fwrite(&rout[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("rout_list13.txt","rb");

while(t<5)

{

fread(&temp,4,1,fp);

printf("%d",temp);

t++;

}

fclose(fp);

}

结果为

C/C++语言之由数字26引起的文件的数据保存与读取调试。

问题1也得到了解决。
原文链接: https://www.cnblogs.com/kabe/p/5047356.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/225919

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午12:58
下一篇 2023年2月13日 下午12:59

相关推荐