各位老大帮忙看看,为什么运行有错误,好像是访问了非法的内存地址

tankcookie 2003-12-17 12:10:56
string content = "hello world!\n";
ofstream ofs("temp.txt", ios::binary);
for (int i = 0; i < 3; ++i)
ofs.write( content.c_str(), content.length() );
ofs.close();

ifstream ifs( "temp.txt", ios::binary );
char* buf = new char();
string temp;
while (ifs.read(buf, content.length()) && !ifs.eof( ))
{

printf("%s", buf);
}
ifs.close();
delete buf;
buf = NULL;

...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiaojicheng 2003-12-17
  • 打赏
  • 举报
回复
楼上所说是对的,如果用char *buf = new char[48],后面删除的时候做个修改,delete []buf;这样就可以了。
arfi 2003-12-17
  • 打赏
  • 举报
回复
char* buf = new char(); 问题是不是出在这里了

你没有指定长度,而且注意下面的区别
char* buf = new char(48); //申请一个字符大小的空间,并赋予初值48
char* buf = new char[48]; //申请48个字符大小的空间
arfi 2003-12-17
  • 打赏
  • 举报
回复
char* buf = new char[content.length()+1];
buf[content.length()] = '\0';

因为length不包含结束符,读的时候也不会自动加上结束符。所以显示错误,你要是一个个字符显应该是好的,否则就像上面那样现在结尾加上结束符
tankcookie 2003-12-17
  • 打赏
  • 举报
回复
可能我的意思没有说清楚,如果程序按楼上2位说的改是没有问题,可结果有问题

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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