首页 > 编程语言 > 详细

【C++】stringstream的str() 和 string的c_str()

时间:2021-04-26 23:17:46      阅读:26      评论:0      收藏:0      [点我收藏+]

std::stringstream::str

// stringstream::str
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream, std::stringbuf

int main () {
  std::stringstream ss;
  ss.str ("Example string");
  std::string s = ss.str();
  std::cout << s << \n;
  return 0;
}

streamstring在调用str()时,会返回临时的string对象。而因为是临时的对象,所以它在整个表达式结束后将会被析构。

如果需要进一步操作string对象,先把其值赋给一个string变量后再操作。

 

std::string::c_str

// strings and c-strings
#include <iostream>
#include <cstring>
#include <string>

int main ()
{
  std::string str ("Please split this sentence into tokens");

  char * cstr = new char [str.length()+1];
  std::strcpy (cstr, str.c_str());

  // cstr now contains a c-string copy of str

  char * p = std::strtok (cstr," ");
  while (p!=0)
  {
    std::cout << p << \n;
    p = std::strtok(NULL," ");
  }

  delete[] cstr;
  return 0;
}

c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 

1.c_str是一个内容为字符串指向字符数组的临时指针; 
2.c_str返回的是一个可读不可改的常指针;

注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 
比如:最好不要这样:

const char* func()
{
    const char* c; 
    string s="1234"; 
    c = s.c_str();   
    return c;      
}

因为从func()函数退出后,s 会被析构,返回的指针指向了无效区域。

 

【C++】stringstream的str() 和 string的c_str()

原文:https://www.cnblogs.com/devgc/p/14704617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!