#include "stdafx.h" K!E\v4
q1r-xsjV=
#include <iostream> 9fM=5
#include <fstream> j0Os]a
#include <sstream> 19oyoi"
#include <iterator> d+ $:u
using namespace std; 3(.Y>er%U
k{ZQM
int main(int argc, char* argv[])
[W<j
{ LHA:frC
ifstream ifs("test.txt"); G- ]_
d
if(!ifs) XQ}7.u!
return false; NPa4I7`A
N"~P$B1X
ostringstream oss; r(n>N0:0Ls
istream_iterator<char> inpos(ifs); KRhls"\1
istream_iterator<char> endpos; "(';UFa
ostream_iterator<char> out(oss); pB%oFWqK
std::copy(inpos, endpos, out); 6KN6SN$
string& szData = oss.str(); zd F;!
e-lc2$o7{
const char * cc = szData.c_str(); X .K*</(g
// cout << (long)szData << endl; :inVwc
// cout << (long)oss.str().c_str() << endl; |^F$Ta
cout<< cc; [?2?7>D8
u'Hh||La"
return 0; F)/4#[
} N1vA>(2A
<5ULu(b&$
注意以上代码中红色部分没有写成: 7v.O Lp
const char * cc = oss.str().c_str(); // error evVxzU&
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 8S[bt@v
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。