#include "stdafx.h" L8;`*H
esTK4z]
#include <iostream> )sEAPIka
#include <fstream> j{5oXW
#include <sstream> B*Q.EKD8s
#include <iterator>
*!EHs04
using namespace std; +w?1<Z
]sI{+$~:c
int main(int argc, char* argv[]) wZ8LY;
{ D@mqfi(x
ifstream ifs("test.txt"); :)e/(I]
if(!ifs) ]o8~b-
return false; piUfvw
Z*5]qh2r8
ostringstream oss; /3vj`#jD
istream_iterator<char> inpos(ifs);
1 pzd
istream_iterator<char> endpos; [h
:FJ
ostream_iterator<char> out(oss); :n?}G0y
std::copy(inpos, endpos, out); $r)nvf`\
string& szData = oss.str(); `^E(P1oJ3
hWu#}iN
const char * cc = szData.c_str(); {'
|yb
// cout << (long)szData << endl; q->46{s|
// cout << (long)oss.str().c_str() << endl; #lm1"~`5
cout<< cc; @}N;C..Y$
\-s'H:
return 0; M8lR#2n|
} +%RXV~
4VL]v9
注意以上代码中红色部分没有写成: Y6@A@VJ
const char * cc = oss.str().c_str(); // error &-Zg0T&tZ
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 $VJ=A<
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。