ends-windows和linux的差异

-*-**-*-*-*-*-*-*-*cout<<ends-windows和linux的差异:window->'\0'->空格,linux->'\0'->不输出

关于ends是C++中比较基础的一个东西,但是可能不是每个人都能够清楚的理解这是个什么东西,我就经历了这么一个过程,写出来让大家看看,有什么理解的不对的地方欢迎拍砖。

    今天以前我对ends的理解是:输出空格的工具,或者说这就是一个逼格比较高的" ".(这貌似是拜老师所赐,特地翻出课件发现就是这么写的,输出空格…相信有不少人是这么看的吧)

    今天由于某些原因发现 cout《ends;和cout《" ";貌似不是一个东西,于是开始探究:

    一、cplusplus的解释

    这个网站是最权威的C++相关的网页,在上面找到了ends的定义:

    1 _CRTIMP inline basic_ostream<char, char_traits<char> >&

    2  __cdecl ends(basic_ostream<char, char_traits<char> >& _O)

    3  {

    4     _O.put('\0');

    5      return (_O);

    6  }

    从这我们不难发现ends实际上是输出了一个'\0'字符,并不是我们想象的空格。

    二、为什么有时候使用ends输出的的确是空格

    同时我看到了msdn上的解释,这个讲的原理也是一样的输出'\0',但是下面有个例子:

    1 // ostream_ends.cpp

    2 // compile with: /EHsc

    3 #include <iostream>

    4

    5 int main( )

    6 {

    7    using namespace std;

    8    cout 《 "a";

    9    cout 《 "b" 《 ends;

    10    cout 《 "c" 《 endl;

    11 }

    这个的输出是

    ab c

    这又有点令人不解了,为什么这个ends当空格又能使了呢。于是我猜测是因为系统的差异,于是我进行了如下实验:

    1、windows下运行

    1 #include<iostream>

    2 using namespace std;

    3 int main()

    4 {

    5     cout《"ddd"《'\0'《"dsad"《endl;

    6 }

    输出:

    ddd dsad

    2、Ubuntu下运行同样的代码

    输出:

    ddddsad

    三、总结

    到这里我觉得这个原因就出来了,其实C++对ends的处理时一样的,都是在缓冲区插入'\0'然后刷新,之所以在不同的系统下的显示情况不同是因为,windows和linux对'\0'的处理方式不同,在windows中会输出一个空格,而linux下则不会有什么输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值