ifstream 中的read出来是乱码的问题

wangsiyuanoo 2009-05-06 04:27:32
ifstream fin("E:\\sx\\wsy.001",ios_base::binary|ios_base::in); //wsy.001是一个二进制文件
fin.seekg (0, ios::end);
int length = fin.tellg();
char * buf = new char[length];
while(fin)
{
fin.read(buf, length); //buf读出来是屯屯屯屯屯屯屯屯屯屯......,怎么解决?
}

fin.close();


ps:用char []却可以。但不能用char [],因为文件的字符长度我事先并不知道。
...全文
409 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
operatingtuzi 2009-05-06
  • 打赏
  • 举报
回复
fin.seekg (0, ios::end);
把文件内部指针定位到最后
fin再read的时候是从文件内部指针的位置开始 所以 没读出想要的内容


fin.seekg(ios::beg) 这是begin的缩写吗 试试这个

wangsiyuanoo 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fengxuxing 的回复:]
fin.seekg (0, ios::beg);
你在尾部读取的,要先挑到头部
[/Quote]
不太懂这个函数的意思。。。
夹心饼干 2009-05-06
  • 打赏
  • 举报
回复
ifstream fin("E:\\sx\\wsy.001",ios_base::binary|ios_base::in); //wsy.001是一个二进制文件
fin.seekg (0, ios::end);
int length = fin.tellg();
char * buf = new char[length+1];
memset(buf,0x00,length+1);
fin.seekg (0, ios::beg);
while(!fin.eof())
{
fin.read(buf, length); //buf读出来是屯屯屯屯屯屯屯屯屯屯......,怎么解决?
}
cout<<buf<<endl;
fin.close();
Qlaiaqu 2009-05-06
  • 打赏
  • 举报
回复
改成这样最好
char * buf = new char[length+1];
fin.seekg (0, ios::beg);
fin.read(buf, length);
buf[length] = '\0';
Qlaiaqu 2009-05-06
  • 打赏
  • 举报
回复
fin.seekg (0, ios::beg);
你在尾部读取的,要先挑到头部
chenqiang35 2009-05-06
  • 打赏
  • 举报
回复

char * buf = new char[length];
memset(buf, 0, length);//因为分配的空间是未知地址,所以先清空

试试看
taodm 2009-05-06
  • 打赏
  • 举报
回复
哎,兄弟呀,你没seek回去呀。
另外,找本《effective stl》看看item29吧
wangsiyuanoo 2009-05-06
  • 打赏
  • 举报
回复
。。。。。。。。。
没人回答我么
liliangbao 2009-05-06
  • 打赏
  • 举报
回复
帮顶~~~

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧