C++ 二进制文件读取

#include<iostream>#include<fstream>usingnamespacestd;intmain(){charch[100]="HelloWorl... #include<iostream>
#include<fstream>
using namespace std;
int main()
{
char ch[100]="Hello World!";
fstream file("example.dat",ios_base::trunc|ios_base::out|ios::in|ios_base::binary);
file.write(ch,strlen(ch));
file.seekg(ios::beg);

char read_ch;

while(!file.eof())
{
file.read(&read_ch,1);
cout<<read_ch;
}
cout<<endl;

file.close();
return 0;
}

为什么屏幕显示结果是 : " Hello World!! " ????
(最后是两个感叹号,可是二进制文件明明是一个感叹号)
展开
 我来答
terranlong
2012-05-09 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:4024万
展开全部
已改,看注释
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char ch[100]="Hello World!";
fstream file("example.dat",ios_base::trunc|ios_base::out|ios::in|ios_base::binary);
file.write(ch,strlen(ch));
file.seekg(ios::beg);

char read_ch;

// 分析一下你写的
while(!file.eof()) // 没读到文件结尾就循环
{
file.read(&read_ch,1); // 读一个字节
cout<<read_ch; // 将读到的字节打印出来,但如果上面read到结尾,read_ch的值没变,还是上一次循环那个,因此会打印2个!
}

// 改成以下这样就可以了
while(file.read(&read_ch,1)) // 如果读到文件结尾,read函数返回0,下面的就不执行了
{
cout<<read_ch;
}
cout<<endl;

file.close();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kingliu1234
2012-05-09 · TA获得超过578个赞
知道小有建树答主
回答量:743
采纳率:0%
帮助的人:475万
展开全部
iostream的eof()函数判断的是文件的结束符FF,所以当read到叹号的时候eof()仍然返回false,然后又循环了一次,所以程序就多输出了一个叹号.
可以把while中的条件改为file.peek() != EOF,peek()是取当前指针的后一个字符.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式