#include "stdafx.h" 0|*UeM
s|rZ>SLL
#include <iostream> Z1qATXXf
#include <fstream> 9cx!N,R t
#include <sstream> VAG+y/q
#include <iterator> zN8&M<mTl
using namespace std; ^`B##9g~
E?;T:7.%
int main(int argc, char* argv[]) _sCJ3ZJ
{ Wtzj;GJj
ifstream ifs("test.txt"); $=S'#^Z
if(!ifs) cVv4gQD\
return false; (tz_D7c$F
}tS6Z:fOY
ostringstream oss; Ke;X3j ]`
istream_iterator<char> inpos(ifs); 5;i!PuL
istream_iterator<char> endpos; k(vEp]
ostream_iterator<char> out(oss); xs83S.fHg
std::copy(inpos, endpos, out); !xx>
lX5
string& szData = oss.str(); \p=W4W/
`!>dbR&1
const char * cc = szData.c_str(); Jr*S2z<*
// cout << (long)szData << endl; U{:(j5m
// cout << (long)oss.str().c_str() << endl; Z2pN<S{5
cout<< cc; \w@_(4")Qb
Rs(CrB/M
return 0; H--*[3".
} q4#f
*]
Y|qixpP
注意以上代码中红色部分没有写成: 9OO_Hp#|9
const char * cc = oss.str().c_str(); // error BD-c 0-+m
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ,oi`BOh
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。