#include "stdafx.h" o0G`Xn
B)]{]z0+`
#include <iostream> A_Iu*pz^^
#include <fstream> k|3(dXLG
#include <sstream> o#P3lz
#include <iterator> {p|%hhTK%
using namespace std; /:`
i%E
pPqN[OJ
int main(int argc, char* argv[]) 0 l:pWc
{ ph?0I:eU
ifstream ifs("test.txt"); <cv1$
x ~P
if(!ifs) _IV@^v
return false; )v=G}j^
cXcx_-
ostringstream oss; (VaN\+I:T
istream_iterator<char> inpos(ifs); RVnyl`s
istream_iterator<char> endpos; h+3Z.WKhwP
ostream_iterator<char> out(oss); `4.sy +2
std::copy(inpos, endpos, out); Ig3(|{R
string& szData = oss.str(); g]<Z]R`
G'2=jHzMF
const char * cc = szData.c_str(); fG2&/42J
// cout << (long)szData << endl; (kQ.tsl
// cout << (long)oss.str().c_str() << endl; rz}l<t~H
cout<< cc; qH
Ga
rm=~^eB
return 0; :{s%=\k {d
} {!1n5a3" 1
g!p_c
注意以上代码中红色部分没有写成: G;HlII9x[
const char * cc = oss.str().c_str(); // error 2c~?UK[1
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ^i+z_%V
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。