小心stringstream.str()字符串用法的陷阱

在编写应用程序时,我们经常要使用到字符串。C++标准库中的<string>和<sstream>为我们操作字符串提供了很多的方便,例如:对象封装、安全和自动的类型转换、直接拼接、不必担心越界等等。但今天我们并不想长篇累牍得去介绍这几个标准库提供的功能,而是分享一下stringstream.str()的一个有趣的现象。我们先来看一个例子:

   #include <string>
   #include <sstream>
   #include <iostream>

   using namespace std;

   int main()
   {
       stringstream ss("012345678901234567890123456789012345678901234567890123456789");
      stringstream t_ss("abcdefghijklmnopqrstuvwxyz");
      string str1(ss.str());

      const char* cstr1 = str1.c_str();
      const char* cstr2 = ss.str().c_str();
      const char* cstr3 = ss.str().c_str();
      const char* cstr4 = ss.str().c_str();
      const char* t_cstr = t_ss.str().c_str(); 

      cout << "------ The results ----------" << endl
           << "cstr1:\t" << cstr1 << endl 
           << "cstr2:\t" << cstr2 << endl
           << "cstr3:\t" << cstr3 << endl
           << "cstr4:\t" << cstr4 << endl
           << "t_cstr:\t" << t_cstr << endl
           << "-----------------------------"  << endl;

      return 0;
  }

在看这段代码的输出结果之前,先问大家一个问题,这里cstr1、cstr2、cstr3和cstr4 打印出来结果是一样的么?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值