#include "stdafx.h" 8
K!a:{
k<H&4Z)d9
#include <iostream> bxq`E!]
#include <fstream> cgOoQP/#
#include <sstream> K?
k`U,
#include <iterator> ?VsZo6Z"
using namespace std; +%v4Ci"%y
D(|$6J 0
int main(int argc, char* argv[]) 5Ncd1
{ lUd,-
ifstream ifs("test.txt"); hd-ds~ve
if(!ifs) "(qO}&b>
return false; -X
\vB
]du~V?N
ostringstream oss; oR)7 \;g
istream_iterator<char> inpos(ifs); xd<68%Cn
istream_iterator<char> endpos; zu%pr95U
ostream_iterator<char> out(oss); ta(x4fP_
std::copy(inpos, endpos, out); gEu\X|7'
string& szData = oss.str(); dD%m=x
6}$cDk`dz
const char * cc = szData.c_str(); [:qX3"B
// cout << (long)szData << endl; 'P#I<?vB
// cout << (long)oss.str().c_str() << endl; [-ecKPx
cout<< cc; i^l;PvIF
.O^|MhBJu
return 0; 0
CS_-
} j;.&+.
a\MJbBXv
注意以上代码中红色部分没有写成: :e;fs.C
const char * cc = oss.str().c_str(); // error I<U 1V<g
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ?}>tfDu'
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。