#include "stdafx.h" U}7[8&k1
N7_Co;#(zK
#include <iostream> 7^L&YVW
#include <fstream> S]N4o'K}q
#include <sstream> "f3>20}
#include <iterator> H1]\B:
using namespace std; @^ e@.)
:uEp7Y4
int main(int argc, char* argv[]) pIXQ/(h31
{ ox6rR
ifstream ifs("test.txt"); .DQ]q o]OG
if(!ifs)
Ojs\2('u
return false; L:<'TXsRA
ke0W?
ostringstream oss; D8ly8]H
istream_iterator<char> inpos(ifs); .EdV36$n
istream_iterator<char> endpos; _=MWt_A '3
ostream_iterator<char> out(oss); hD*?\bBs0
std::copy(inpos, endpos, out); X]!@xlwF\
string& szData = oss.str(); [=Z{y8#:J
.>YJ95&\
const char * cc = szData.c_str(); ~I<y^]2{
// cout << (long)szData << endl; $enh45Wy
// cout << (long)oss.str().c_str() << endl; ;w>B}v;RE
cout<< cc; <wC1+/]
yiOF&
return 0; ^kq! /c3r
} R4/@dA0
Ir'f((8:
注意以上代码中红色部分没有写成: (0+m&,
z
const char * cc = oss.str().c_str(); // error $W]bw#NH
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Oc.>$
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。