#include "stdafx.h" ]V.0%Ccw;.
XFrgnnt
#include <iostream> ">'`{mXew
#include <fstream> (7?jjH^4
#include <sstream> I>%@[h,+
#include <iterator> {GKq Ou
using namespace std; rEY5,'?YHv
lPOcX'3\
int main(int argc, char* argv[]) =7 ${bp!
{ p'YNj3&u
ifstream ifs("test.txt"); z]0UW\S/
if(!ifs) F'3-*>]P
return false; ca?;!~%zA
O
K2|/y
ostringstream oss; +EP=uV9t
istream_iterator<char> inpos(ifs); >
@n?W"
istream_iterator<char> endpos; ZE"Z_E;r
ostream_iterator<char> out(oss); XE.Y?{,R$
std::copy(inpos, endpos, out); Q??nw^8Hi
string& szData = oss.str(); [B" CNnA
WoX,F1 o
const char * cc = szData.c_str(); ~JSa]6:_+
// cout << (long)szData << endl; 1xt N3{c
// cout << (long)oss.str().c_str() << endl; ZY{zFg9
cout<< cc; ^laf!kIP
4KT-U6zNx
return 0; RMO6k bfP
} %N0cp@Vz
0Lki(
注意以上代码中红色部分没有写成: Wz-7oP%;I
const char * cc = oss.str().c_str(); // error B4ky%gF4
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 E@D}Sqt
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。