#include "stdafx.h" 9/R=_y-
0f5)]
#include <iostream> jq|fIP
#include <fstream> JxRn)D
#include <sstream> sd*NY
#include <iterator> :&RpB^]
using namespace std; vv`53 Pbw)
=jU#0FAO
int main(int argc, char* argv[]) )M56vyo
{ )Q|sW+AF
ifstream ifs("test.txt"); )G#O# Yy
if(!ifs) 3Ea/)EB]
return false;
H^$7=
5<oV>|*@{
ostringstream oss; Of<Vr.m{R
istream_iterator<char> inpos(ifs); A2`Xh#o
istream_iterator<char> endpos; <bywi2]z
ostream_iterator<char> out(oss); -t125)6 I
std::copy(inpos, endpos, out); 99b"WH^3$y
string& szData = oss.str(); Bv6~!p
"""eU,"
const char * cc = szData.c_str(); E1qf N>0Z
// cout << (long)szData << endl; ~(^?M
// cout << (long)oss.str().c_str() << endl; VlxHZ
cout<< cc; edlsS}8^
UGA``;f
return 0; 0!1cHB/c
} ;PMy9H
7q#R,\
注意以上代码中红色部分没有写成:
n3s
const char * cc = oss.str().c_str(); // error U{9yfy
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 88DMD"$B
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。