#include "stdafx.h" 2EI m
jv?aB
#include <iostream> )H=[NB6J8
#include <fstream> 'f$?/5@@
#include <sstream> [W7\c;Do
#include <iterator> h<z/LL8|
using namespace std; *+1"S ]YF
u9y-zhj_$
int main(int argc, char* argv[]) SE7 (+r
{ d}6AHS[
ifstream ifs("test.txt"); rym\5
`)
if(!ifs) L_CEY
return false; 3YZ3fhpw
/:c,v-
ostringstream oss; UmHJ/DI@
istream_iterator<char> inpos(ifs); @,f,tk=\S
istream_iterator<char> endpos; J*W;{Vty
ostream_iterator<char> out(oss); ;7hX0AK
std::copy(inpos, endpos, out); E&Zx]?~
string& szData = oss.str(); "e!$=;5
PrYWha=c-
const char * cc = szData.c_str(); bNPjefBF
// cout << (long)szData << endl; VIlQzM;%^
// cout << (long)oss.str().c_str() << endl; )jQe K
cout<< cc; 4s+J-l
/hj9Q!
return 0; KE|u}M@v6
} Z+pvdu
JKu6+V jO
注意以上代码中红色部分没有写成: 9zGKQ |X)
const char * cc = oss.str().c_str(); // error myo~Qqt?
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 8G^B%h]
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。