头文件sstream,stringstream的区别

alexing9999 2008-04-24 09:59:17
以前一直以为这两个就是一个样的,就名字的区别而已,今天编了个小程序,发现好象跟我想象的不大一样,请高手指点!

#include <iostream>
#include <sstream>
#include <string>
#include <strstream>
using namespace std;
//将整型转换成字符型
string int_to_string(int i)
{
ostringstream os;
os<<i;
return os.str();
}
string int_to_string1(int i)
{
ostrstream os;
os<<i;
return os.str();
}
int main()
{
cout<<int_to_string(20)<<endl;
cout<<int_to_string1(20)<<endl;
return 0;
}


用第一个版本输出时是没问题的,
但用第2个版本时输出原来的整数后后面会出现一些中文!

~~~~~~~~~~~~~~~~~~~
另请教怎么把运行窗口里的内容发上来啊
...全文
2271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yebai 2009-05-03
  • 打赏
  • 举报
回复
我觉得原因是返回char*,这个可能程序会一直找到'\0',所以会输出一大堆中文乱码,因为这是后面内存中的内容。。。
而要是返回string,肯定不会有类似的问题了。。。
不知道我说的对不对啊,呵呵!
aimar_07 2009-02-23
  • 打赏
  • 举报
回复
学习了~
不过还是不太明白为什么返回char*类型就会有中文
pitot 2008-06-05
  • 打赏
  • 举报
回复
三楼说了,ostrstream是char*风格的,输出时别忘了最后加上std::ends或者'\0'。
...
os<<i<<std::ends;
...
effective_person 2008-04-24
  • 打赏
  • 举报
回复
ostrstream 是非标准的C++中的,是基于C语言中。

str()返回的char*类型,当然会有后面的中文啦
alexing9999 2008-04-24
  • 打赏
  • 举报
回复
那istringstream和ostringstream类呢,

为什么第2个版本会打出多余的中文来啊


20
20屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯葺葺
请按任意键继续. . .
iu_81 2008-04-24
  • 打赏
  • 举报
回复
在C++有两种字符串流,一种在sstream中定义,
另一种在strstream中定义。
它们实现的东西基本一样。

strstream里包含
class strstreambuf;
class istrstream;
class ostrstream;
class strstream;
它们是基于C类型字符串char*编写的

sstream中包含
class istringstream;
class ostringstream;
class stringbuf;
class stringstream;
class …….
它们是基于std::string编写的

因此ostrstream::str()返回的是char*类型的字符串
而ostringstream::str()返回的是std::string类型的字符串

在使用的时候要注意到二者的区别,一般情况下推荐使用std::string类型的字符串
当然如果为了保持和C的兼容,使用strstream也是不错的选择。
hellodudu 2008-04-24
  • 打赏
  • 举报
回复
istrstream类是从istream(输入流类)和strstreambase(字符串流基类)派生而来,ostrstream是从ostream(输出流类)和strstreambase(字符串流基类)派生而来,strstream则是从iostream(输入输出流类)和和strstreambase(字符串流基类)派生而来。

istrstream类用于执行C风格的串流的输入操作,也就是以字符串数组作为输入设备。
  ostrstream类用于执行C风格的串流的输出操作,也就是一字符串数组作为输出设备。
  strstream类同时可以支持C风格的串流的输入输出操作。
zgjxwl 2008-04-24
  • 打赏
  • 举报
回复
点运行窗口最左上角的图标
然后-->编辑-->标记-->选定-->回车
即可复制粘贴

64,682

社区成员

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

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