#include "stdafx.h" f/e2td*A
(N$$N:ac[t
#include <iostream> mG+hLRTXP
#include <fstream> l&m'?.gf
#include <sstream> "dBCS
#include <iterator> WyJXT.
using namespace std; ppPzI,
)4bZ;'B5
int main(int argc, char* argv[]) cP[]\r+Kj
{ }$1Aw%p^
ifstream ifs("test.txt"); Gq^#.o]
if(!ifs) x^JjoI2vf
return false; }NETiJ"6
8A|i$#.&
ostringstream oss; 2s8(r8 AI
istream_iterator<char> inpos(ifs); 0%5x&vx'S
istream_iterator<char> endpos; z,/y2H2
ostream_iterator<char> out(oss); M^~
std::copy(inpos, endpos, out); l%9nA.M'
string& szData = oss.str(); My\
V39)[FH}
const char * cc = szData.c_str(); ^1NtvQe@Y\
// cout << (long)szData << endl; |cq%eN
// cout << (long)oss.str().c_str() << endl; AZadNuL/
cout<< cc; T#w *5Qf
d^jIsE `
return 0; ]<\; -i)
} Ow7I`#P
>zWVM1\\j
注意以上代码中红色部分没有写成: POvpaPAZ<
const char * cc = oss.str().c_str(); // error kEs=N(
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 *oz=k
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。