关于fread的问题求救啊!

ly8556 2008-04-16 01:51:25
////////////////////////////////问题一:fread读取乱码/////////////////////////

FILE* pFile = fopen("1.txt","r");
if( NULL == pFile )
{
AfxMessageBox("无法打开文件");
}

fseek(pFile,0,SEEK_END);
int len = ftell(pFile); //经过反复测试能够正确得出字符数目,说明读取没有问题

char *buffer = new char[len+1];
if ( NULL == buffer ) MessageBox("buffer错误"); //这里也没有出错

int a = fread(buffer,sizeof(char),len,pFile); //这里用sizeof(char)或者1函数返回都为0
/*CString tem;
tem.Format("%d",a);*/ //为了检测输出fread的返回值写的,无任何意义

buffer[len] = '\0'; //设置文件结尾
MessageBox(buffer); //结果输出为 屯屯.... 我晕!
fclose(pFile);

求救!小弟初学,学到读取文件这里。1.txt中的数据是我用fwrite写入的,可是读的话就读出 屯屯屯....郁闷。在网上查了半天发现别人显示乱码的问题属于结尾没有设置'\0',但是我也设置了啊。如果是读取失败的话也没提示......

///////////////////////////////////////////问题二//////////////////////////////////////////////

问题二:用ofstream替换fwrite //程序用fwrite写时候可以运行 改为ofstream后编译出错
using namespace std; //文件中包含了<fstream>
ofstream fout("1.txt"); //改成 fout.open(...) 结果一样
fout << "怎么不行啊!" <<endl;
fout.close(); // 写到fout.的时候系统会自动提示成员函数列表,推测系统已经识别了fout是个对象

错误提示 error C2065: 'ofstream' : undeclared identifier //出现这种错误很意外!
error C2146: syntax error : missing ';' before identifier 'fout'.....诸如此类.

这是第二个问题,请高手认真看完后帮我解答一下~ 小弟在此先谢过了!
...全文
158 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly8556 2008-04-16
  • 打赏
  • 举报
回复
郁闷 我重新开了个工程居然就可以用了..... 谢谢楼上各位高手的帮助 问题全部解决了 可是现在还不到一天 系统说要一天后才可以给分 谢谢帮忙 晚上我来给分
ly8556 2008-04-16
  • 打赏
  • 举报
回复
还是不行.... 我创建的是MFC应用程序, 是不是这样创建不能用c++函数?
我在用ofstream对象调用函数的时候系统都有成员函数提示出来,可是编译时候却说不知道....
野男孩 2008-04-16
  • 打赏
  • 举报
回复
sizeof("你看到底行不行").........汗
younel0921 2008-04-16
  • 打赏
  • 举报
回复
用memset(buffer,0,len)将长度为len的buffer初始化为0就可以没有这种情况
薛定谔之死猫 2008-04-16
  • 打赏
  • 举报
回复
ofstream fout("1.txt");
fout.write("你看到底行不行", sizeof("你看到底行不行");
andy_cai 2008-04-16
  • 打赏
  • 举报
回复
你用ofstream的话,要把工程设为console方式
薛定谔之死猫 2008-04-16
  • 打赏
  • 举报
回复
慢了好几拍
ly8556 2008-04-16
  • 打赏
  • 举报
回复
谢谢楼上高手, 第一个问题已经解决了。 能否帮忙解决一下第二个问题~
薛定谔之死猫 2008-04-16
  • 打赏
  • 举报
回复
////////////////////////////////问题一:fread读取乱码/////////////////////////

FILE* pFile = fopen("1.txt","r");
if( NULL == pFile )
{
AfxMessageBox("无法打开文件");
}

fseek(pFile,0,SEEK_END);
int len = ftell(pFile); //经过反复测试能够正确得出字符数目,说明读取没有问题

fseek(pFile,0,SEEK_SET);//>>>>>>>>>>>>>>>>>>>>>>>>>>这里把文件指针移回来,被你移到尾了,导致什么都读不到

char *buffer = new char[len+1];
if ( NULL == buffer ) MessageBox("buffer错误"); //这里也没有出错

int a = fread(buffer,sizeof(char),len,pFile); //这里用sizeof(char)或者1函数返回都为0
/*CString tem;
tem.Format("%d",a);*/ //为了检测输出fread的返回值写的,无任何意义

buffer[len] = '\0'; //设置文件结尾
MessageBox(buffer); //结果输出为 屯屯.... 我晕!
fclose(pFile);
andy_cai 2008-04-16
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_END);
你已经到文件末尾了
要重新
fseek(pFile,0,SEEK_SET);

64,670

社区成员

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

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