#include "stdafx.h" /GNLZm^
&Ib8xwb:
#include <iostream> yzt6
#include <fstream> EUj'%;sz-
#include <sstream> s`ly#+!.
#include <iterator> A,rgN;5fb
using namespace std; U@dztX@u
uYAPGs#k
int main(int argc, char* argv[]) ,{A-<=6t
{ LD5n_W
ifstream ifs("test.txt"); 7nB@U$]-Sz
if(!ifs) f_X]2in
return false; VL"!.^'c
QA\eXnR
ostringstream oss; g5/%}8[-
2
istream_iterator<char> inpos(ifs); A.m#wY8
istream_iterator<char> endpos; dhpEBJ
ostream_iterator<char> out(oss); pc<")9U%/
std::copy(inpos, endpos, out); 7f_4qb8
string& szData = oss.str(); $QmP'
<
vbzeabm
const char * cc = szData.c_str(); EZ*FGt6(
// cout << (long)szData << endl; ,/{mRw%
// cout << (long)oss.str().c_str() << endl; Ia$&SS)K
cout<< cc; )nyud$9w'
6,)!\1k
return 0; oqHI`Tu
} ~hPp)-A
"40Jxqt
注意以上代码中红色部分没有写成: #>dfP"}&,
const char * cc = oss.str().c_str(); // error qYc]Y9fi
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 'n%Ac&kk
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。