请问程序哪里出错了

 我来答
lougx
2012-11-28 · TA获得超过149个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:155万
展开全部

你在char *buf = ss.str();设个断点,你就明白了。

1. ss << "Hi, welcome to !"; 后,ss内部没有“\0”结尾。

2.  ss.str(); 时,它内部会调用freeze函数,然后你再使用ss<<"\0";时,并没有像你预期的那样,写成功了。向一个freeze的strstream写数据会导致它坏掉。


所以buf并没有null结尾,后面的东东是随机的,未初始化的内存内容。


  • 正确的做法:

ostrstream ss;

int n;

ss << "Hi, welcome to !";

n = ss.pcount();

char *buf = new char[n+1];

memset(buf, 0, n+1);

memcpy(buf, ss.str(), n);

cout <<"n="<<n<<endl;

cout<<buf<<endl;

delete[] buf;

return 0;

追问
请问ss.pcount()是什么意思
追答
取得strstream 里字符sequence的长度,有点像string的长度,但没有NULL结尾。
来自:求助得到的回答
k462846
2012-11-27
知道答主
回答量:38
采纳率:0%
帮助的人:13.8万
展开全部
明显就是数组越界,你的buffer没有做初始化,改成char *buffer = Null在肤质就没问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式