#include "stdafx.h" (H*EZ
9?6]Zag
#include <iostream> >}p'E9J?r
#include <fstream> xV}ybRKV
#include <sstream> q
?qpUPzD
#include <iterator> }23#z
using namespace std; -!s?d5k")
+J+[fbqX
int main(int argc, char* argv[]) (TF;+FRW
{ kvoEnwBe_
ifstream ifs("test.txt"); q'
if(!ifs) =a]B#uUn
return false; W3h{5\d!
P*kKeMl
ostringstream oss; ]CnqPLqL
istream_iterator<char> inpos(ifs); -:P`Rln
istream_iterator<char> endpos; Fb^Ae6/i
ostream_iterator<char> out(oss); 4Up3x+bg
std::copy(inpos, endpos, out); Aq5@k\[
string& szData = oss.str(); vrr`^UB2
:VvJx]
const char * cc = szData.c_str(); t)62_nu
// cout << (long)szData << endl; Qt
VZ)777
// cout << (long)oss.str().c_str() << endl; h{BO\^6x
cout<< cc; w~S~
uA1DTr?z
return 0; Qk_Mx"
} |Ox!tvyr
"KhVS
注意以上代码中红色部分没有写成: 0D=7Mef
const char * cc = oss.str().c_str(); // error a+_F^
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 &l| :1
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。