#include "stdafx.h" -J6G=+s/
n)<S5P?
#include <iostream> ;h"St0
#include <fstream> B=<Z@u
#include <sstream> hf`5NcnP
#include <iterator> VG=mA4Dd
using namespace std; 5LX'fL7zU
#^>Md59N
int main(int argc, char* argv[]) 15l{gbCW
{ I$y6N"|
ifstream ifs("test.txt"); w7d<Ky_C
if(!ifs) o9XT_!Cwg
return false; !
^ DQX=1
id?B<OM
ostringstream oss; rYKGBo8"
istream_iterator<char> inpos(ifs); W'xJh0o
istream_iterator<char> endpos; #Fwf]{J
ostream_iterator<char> out(oss); ob_*fP
std::copy(inpos, endpos, out); 1;E^3j$
string& szData = oss.str(); c e\|eN[
llE_-M2gH
const char * cc = szData.c_str(); P}re"<MD
// cout << (long)szData << endl; 'JpCS
// cout << (long)oss.str().c_str() << endl; E9bc pup
cout<< cc; v<AFcY
AE@N:a
return 0; CG0jZB#u
} r7zS4;b
9 *+X^q'
注意以上代码中红色部分没有写成: ~lQ<#*wl
const char * cc = oss.str().c_str(); // error tb1w 6jaU
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 -Pt']07E
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。