【C++】stringstream的str()和string的c_str()std::::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';
return0;
}
streamstring在调⽤str()时,会返回临时的string对象。⽽因为是临时的对象,所以它在整个表达式结束后将会被析构。
如果需要进⼀步操作string对象,先把其值赋给⼀个string变量后再操作。
std::::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)
{
c++string类型std::cout << p << '\n';
p = std::strtok(NULL,"");
}
delete[] cstr;
return0;
}
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 会被析构,返回的指针指向了⽆效区域。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。