#include "stdafx.h" ZUz7h^3@
{9XNh[NbP
#include <iostream> [!uVo>Q4
#include <fstream> TK~KM
#include <sstream> 4HGS
#include <iterator> _nX8f
&
using namespace std; :c8d([)$
7+X~i@#rU
int main(int argc, char* argv[]) pNmWBp|ER
{ A
McZm0c`
ifstream ifs("test.txt"); $
O[Y
if(!ifs) X2:23j<
return false; #<u;.'R
AUIp
vd
ostringstream oss; tL<.B
istream_iterator<char> inpos(ifs); +#< Z/
istream_iterator<char> endpos; @A*>lUo
ostream_iterator<char> out(oss); cKoW5e|u
std::copy(inpos, endpos, out); N0NFgW;
string& szData = oss.str();
j},i=v
_./s[{ek
const char * cc = szData.c_str(); nf1 `)tXG
// cout << (long)szData << endl; * >8EMq\^
// cout << (long)oss.str().c_str() << endl; ?k;htJcGv
cout<< cc; ]H\tz@
&
?~yJ7~3TS<
return 0; 8gt&*;'}*D
} Z;RUxe|<k
<dr2 bz
注意以上代码中红色部分没有写成: lNWP9?X
const char * cc = oss.str().c_str(); // error ;_E|I=%'E
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 rK:cUW0]X
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。