#include "stdafx.h" Ov<EOK+^
B=!&rKF
#include <iostream> <?8aM7W7
#include <fstream> z.d1>w
#include <sstream> `_;sT8
#include <iterator> };/;L[,G
using namespace std; k{Ad(S4J&
4{zz-4=
int main(int argc, char* argv[]) kfc5ra>&
{ v^A4%e<8^r
ifstream ifs("test.txt"); OS-
Xh-:z
if(!ifs) zv.R~lMtY
return false; $tm%=g^
GycW3tc]_&
ostringstream oss; ZsnFuk#W
istream_iterator<char> inpos(ifs); S Lsw '<
istream_iterator<char> endpos; M0) q
ostream_iterator<char> out(oss); O%m\
Q1
std::copy(inpos, endpos, out); PAYS~MnV@3
string& szData = oss.str(); >v?&&FhHK<
(i 2R1HCa
const char * cc = szData.c_str(); uE'O}Y95
// cout << (long)szData << endl; _ZMAlC*$G
// cout << (long)oss.str().c_str() << endl; >(.GIR
cout<< cc; e #!YdXSx
GBg~NkC7.
return 0; C
srxi'Pe
} NpPuh9e{
a*kvU "]
注意以上代码中红色部分没有写成: 'r0kX||
const char * cc = oss.str().c_str(); // error ojva~mnFf
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 +`RQ^9
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。