#include "stdafx.h" pO7Zs
b2,!g }I
#include <iostream> Fv74bC%
#include <fstream> 30>3 !Xqa
#include <sstream> TX=yPq
#include <iterator> H+E$:)gN
using namespace std; #|[
M?3
?e[lr>-
int main(int argc, char* argv[]) 1)m@?CaI`
{ M_g?<rK
ifstream ifs("test.txt"); nKa$1RMO
if(!ifs) ":a\z(*t
return false; 9KWuN:Sg
eI45PMP
ostringstream oss; JN+_|`
istream_iterator<char> inpos(ifs); VTy9_~q
istream_iterator<char> endpos; fGhn+8VfX
ostream_iterator<char> out(oss); ApBWuXp|u
std::copy(inpos, endpos, out); |a1{ve[
string& szData = oss.str(); %`Z+a.~ U
G uz"wY
const char * cc = szData.c_str();
HY)-/
// cout << (long)szData << endl; ls@i".[
// cout << (long)oss.str().c_str() << endl; '3zc|eJt&
cout<< cc; A,sr[Pa@
Mmpfto%i
return 0; `]Q:-h
} WSuww
nRyU]=-X
注意以上代码中红色部分没有写成: VD_$$Gn*q
const char * cc = oss.str().c_str(); // error DC{>TC[p1k
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 .o) `m9/
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。