#include "stdafx.h" k/nOz*
gf+Kr02~
#include <iostream> ?8Cxt|o>
#include <fstream> YZ\$b=-
#include <sstream> >]"5K<-1
#include <iterator> P]2M
using namespace std; VL"ZC:n)-
w5jH#ja
int main(int argc, char* argv[]) 9>psQ0IRvr
{ MxxY MR
ifstream ifs("test.txt"); u*[,W-R&
if(!ifs) +3vK=d_Va
return false; ld94ek
5(>m=ef"
ostringstream oss; G Q&9by=}
istream_iterator<char> inpos(ifs); EA75
D&>I
istream_iterator<char> endpos; yuswWc'
ostream_iterator<char> out(oss); \~xsBPX+x
std::copy(inpos, endpos, out); [8Ub#<]]
string& szData = oss.str(); G5zZf~r
df#DKV:
const char * cc = szData.c_str(); RrLQM!~
// cout << (long)szData << endl; @okC":Fw,
// cout << (long)oss.str().c_str() << endl; =b,$jCv<,5
cout<< cc; ,e>C)wq;
8,Yc1
return 0; [x!T<jJ
} \WouTn
({![
注意以上代码中红色部分没有写成: 65ijzZL;
const char * cc = oss.str().c_str(); // error )QaJYC^+
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 bEbO){Fe
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。