#include "stdafx.h" YiPp#0T[Gx
We*c_;@<
#include <iostream> BXo9s~5Q
#include <fstream> Yg14aKZl
#include <sstream> $Uxg$p qO
#include <iterator> x+5y287#
using namespace std; j\8'P9~%
U9p^?\-=
int main(int argc, char* argv[]) %uLyL4*L(p
{ W4(O2RU
ifstream ifs("test.txt"); I UxsvW+
if(!ifs) ~j2=hkS
return false; '$n#~/#}
7%4@*
ostringstream oss; 8?7:sfc
istream_iterator<char> inpos(ifs); mF !=H%
istream_iterator<char> endpos; D?"TcA
ostream_iterator<char> out(oss); rfNt
std::copy(inpos, endpos, out); /1q] D8
string& szData = oss.str(); L)ry!BuHI
$R<eXDW6:
const char * cc = szData.c_str(); SbW6O_
// cout << (long)szData << endl; m=<;)
// cout << (long)oss.str().c_str() << endl; {m%X\s;ni
cout<< cc; 'u2Qq"d+
-m~[z
return 0; O}3M+
} lEC58`Ws
4q<:%
0M|
注意以上代码中红色部分没有写成: jTx,5s-
const char * cc = oss.str().c_str(); // error c!%:f^7g
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 2v<[XNX
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。