#include "stdafx.h" Cv P`2S\
L=,Y1nO:p
#include <iostream> &:q[-K@!
#include <fstream> }ymc5-
#include <sstream> ;fj9n-
#include <iterator>
rWqkdi1
using namespace std; %P(;8sS
Kc-Y
int main(int argc, char* argv[]) #TIX_ RXh
{ 2k+=kt
ifstream ifs("test.txt"); fMyE}z
if(!ifs) |@+8]dy:l
return false; [qW<D/@
}}s8D>;G~
ostringstream oss; N:OD0m%`)
istream_iterator<char> inpos(ifs); k3C"
istream_iterator<char> endpos; 4uX,uEa
ostream_iterator<char> out(oss); 6mi$.'
qP
std::copy(inpos, endpos, out); tnN'V
string& szData = oss.str(); Tt`L(oF
H/pcXj
const char * cc = szData.c_str(); 6hLNJ
// cout << (long)szData << endl; )>?! xx_`
// cout << (long)oss.str().c_str() << endl; db<q-u
cout<< cc; qP qy4V.;
aN:HG)$@
return 0; yB=C5-\F
} u>81dO]H
EZ..^M3
注意以上代码中红色部分没有写成: iwB8I^
const char * cc = oss.str().c_str(); // error 0Y[*lM-
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ~Vwk:+):
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。