#include "stdafx.h" #M~yt`R~
1 ?BLL;[a8
#include <iostream> -r,v3n
#include <fstream> [s$x"Ex
#include <sstream> ?;oJ=.T
#include <iterator> `xx.,;S
using namespace std; pnuo;r s
(W#CDw<ja
int main(int argc, char* argv[]) $e+4Kt
,
{ uD(C jHM>
ifstream ifs("test.txt"); .nZKy't
if(!ifs) 0UJ6>Rj
return false; yf&_l^!
f?:=@35
ostringstream oss; /ckkqk"
istream_iterator<char> inpos(ifs); rGQD+ d
istream_iterator<char> endpos; >TglX t+
ostream_iterator<char> out(oss); Fm:Ys](
std::copy(inpos, endpos, out); @U!&XZ]h
string& szData = oss.str(); 9ye!kYF,
LCSvw
const char * cc = szData.c_str(); +@]k[9
// cout << (long)szData << endl; \ n2MP
// cout << (long)oss.str().c_str() << endl; :rM2G@{
cout<< cc; ,Z
@I"&H
eyh}O
return 0; ;`/a. /bc
} U%pB
9n is8
注意以上代码中红色部分没有写成: C&Qt*V#,
const char * cc = oss.str().c_str(); // error i#4+l$q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 $(gL#"T
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。