#include "stdafx.h" voaRh@DZ%/
l[^bo/
#include <iostream> au8bEw&W
#include <fstream> n<7#?X7
#include <sstream> nX>k}&^L
#include <iterator> vKDPg p<j
using namespace std; ~K^Z4
G%anot
int main(int argc, char* argv[]) dL")E|\\k
{ x>5#@SX
J
ifstream ifs("test.txt"); J6Mm=bO5
if(!ifs) mxjY-Kq
return false; A0S6 4(
0; OpT0
ostringstream oss; <?Fgm1=o
istream_iterator<char> inpos(ifs); $,icKa
istream_iterator<char> endpos; A1\;6W:
ostream_iterator<char> out(oss); XLFJ?$)Tro
std::copy(inpos, endpos, out); \J0gzi.
string& szData = oss.str(); hdN3r{
yq[C?N &N
const char * cc = szData.c_str(); eUqsvF}l!
// cout << (long)szData << endl; VX&KGG.6
// cout << (long)oss.str().c_str() << endl; QsI>_<r
cout<< cc; L4SFu.J'
w0moC9#$?
return 0; 05nG|
} \0j|~/6
)0PUK9
注意以上代码中红色部分没有写成: [F+lVb
const char * cc = oss.str().c_str(); // error o?^j1\^
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 *BBP"_$
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。