#include "stdafx.h" a)!![X?\
]V36-%^
#include <iostream> ><NI'q*cQ
#include <fstream> <0u\dU
#include <sstream> vi]r
#include <iterator> &8<<!#ob
using namespace std; 0R HS]cN
+yf(Rs)!
int main(int argc, char* argv[]) GilQtd3\
{ YV/>8*i
ifstream ifs("test.txt"); v7i^O`{eD?
if(!ifs) d,c8Hs8
return false; J~Cc9"(
E/mubA(&
ostringstream oss; Ap5}5 ewM
istream_iterator<char> inpos(ifs); |[S90Gw]
istream_iterator<char> endpos; ;n`R\NO9
ostream_iterator<char> out(oss); 3 p/b
std::copy(inpos, endpos, out); "]VDY)
string& szData = oss.str(); B_{HkQ.PW
}p~OCW!
const char * cc = szData.c_str(); G2.|fp_}pG
// cout << (long)szData << endl; pheE^jUr
// cout << (long)oss.str().c_str() << endl; GE1i+.+-.
cout<< cc; /g_9m
-S"5{N73
return 0; X E|B)Q(
} #`W=mN(+k
S6v!GQ
注意以上代码中红色部分没有写成: I eG=J4:*
const char * cc = oss.str().c_str(); // error yND"bF9
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 %35L=d[
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。