zz头文件sstream,strstream的区别

 

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

C/C++ code

#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个版本时输出原来的整数后后面会出现一些中文!

~~~~~~~~~~~~~~~~~~~
另请教怎么把运行窗口里的内容发上来啊     .


[华 软 网]
编程论坛 1 个网友回答: 点运行窗口最左上角的图标
然后-->编辑-->标记-->选定-->回车
即可复制粘贴    .


[华 软 网]
编程论坛 2 个网友回答: istrstream类是从istream(输入流类)和strstreambase(字符串流基类)派生而来,ostrstream是从ostream(输出流类)和strstreambase(字符串流基类)派生而来,strstream则是从iostream(输入输出流类)和和strstreambASE(字符串流基类)派生而来。

istrstream类用于执行C风格的串流的输入操作,也就是以字符串数组作为输入设备。 
  ostrstream类用于执行C风格的串流的输出操作,也就是一字符串数组作为输出设备。 
  strstream类同时可以支持C风格的串流的输入输出操作。
    .


[华 软 网]
编程论坛 3 个网友回答: 在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也是不错的选择。
    .

 


[华 软 网]
编程论坛 4 个网友回答: 那istringstream和ostringstream类呢,

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


C/C++ code

20
20屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯葺葺
请按任意键继续. . .
    .

 


[华 软 网]
编程论坛 5 个网友回答: ostrstream 是非标准的C++中的,是基于C语言中。

str()返回的char*类型,当然会有后面的中文啦    .

 


[华 软 网]
编程论坛 6 个网友回答: 三楼说了,ostrstream是char*风格的,输出时别忘了最后加上std::ends或者'/0'。
    ...
    os < <i < <std::ends;
    ...    .

 

 


[华 软 网]
编程论坛 7 个网友回答: 学习了~
不过还是不太明白为什么返回char*类型就会有中文    .
[华 软 网]

 

 


编程论坛 8 个网友回答: 我觉得原因是返回char*,这个可能程序会一直找到'/0',所以会输出一大堆中文乱码,因为这是后面内存中的内容。。。
而要是返回string,肯定不会有类似的问题了。。。
不知道我说的对不对啊,呵呵! 

欢迎转载,但请保留出处,本文章转自[华软网] 原文链接:http://www.huarw.com/program/C/c02/200905/1689096.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值