#include "stdafx.h" >n#Pq{7aF
t>^An:xT
#include <iostream> 6j0!$q^
#include <fstream> 8[eH8m#~$
#include <sstream> P66>w})@
#include <iterator> (sZB-
using namespace std; yPW?%7 h
I~Ziq10
int main(int argc, char* argv[]) mN,Od?q[
{ ~%'M[3Rb
ifstream ifs("test.txt"); + ~HL"Vv
if(!ifs) dQt]r
return false; 8uNq353
!pgkUzMW
ostringstream oss; |iU#!+zY
istream_iterator<char> inpos(ifs); `Q,03W#GJ%
istream_iterator<char> endpos; a
*>$6H;
ostream_iterator<char> out(oss); 'z@(,5
std::copy(inpos, endpos, out); wTG6>l ]H
string& szData = oss.str(); x5s Yo\
P)4SrqW_
const char * cc = szData.c_str(); >%t"VpvR
// cout << (long)szData << endl; R'He(x
// cout << (long)oss.str().c_str() << endl; GC.
cout<< cc; -B'<*Y
sdrALl;w|
return 0; &W*9'vSm.
} +n7bbuxj(X
X180_Kt2
注意以上代码中红色部分没有写成: d(<[$3.
const char * cc = oss.str().c_str(); // error .z+[3Oj_E
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 @#;2P'KL
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。