#include "stdafx.h" UV>^[/^O
g;(r@>U.r
#include <iostream> [c?']<f4
#include <fstream> [P*3ld,,G%
#include <sstream> ZIAiVq2)
#include <iterator> g0.D36
using namespace std; t`{^gt
@URLFMFi
int main(int argc, char* argv[]) nbYkr*: "t
{ H3 _7a 9
ifstream ifs("test.txt"); FAu G`zu
if(!ifs) an3HKfv
return false; T6f{'.w
6Rn_@_Nn)f
ostringstream oss; $;*YdZ`q
istream_iterator<char> inpos(ifs); 7p}G!]`
istream_iterator<char> endpos; 1QRE-ndc
ostream_iterator<char> out(oss); P9J3Ii!
std::copy(inpos, endpos, out); 8|[\Tp:;
string& szData = oss.str(); 78tWzO
`4s5yNUi=
const char * cc = szData.c_str(); 5Ah-aDBj
// cout << (long)szData << endl; h
Ia{s)
// cout << (long)oss.str().c_str() << endl; =K2Dxu_:
cout<< cc; uPe4Rr
lh*m(
return 0; =5&)^
} \S;%
"0!
{xt<`_R
注意以上代码中红色部分没有写成: yy?|q0
const char * cc = oss.str().c_str(); // error ]
K7>R0
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ?Gl'-tV
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。