#include "stdafx.h" b;]'Bo0K
[4
g5{eX
#include <iostream> H|0B*i@81
#include <fstream> nuw90=qj!]
#include <sstream> DG8$zl5
#include <iterator> UL;d H
using namespace std; _E)xR
7$x@;%xd
int main(int argc, char* argv[]) 5U|f"3&8
{ P0RMdf
ifstream ifs("test.txt"); \4K8*`$
if(!ifs) T=VVK6Lc:
return false; EYGJDv(S
&w2.b:HF
ostringstream oss; I-kM~q_
istream_iterator<char> inpos(ifs); }tft@,dIC
istream_iterator<char> endpos; BS*cG>T
ostream_iterator<char> out(oss); 1k2Ck
std::copy(inpos, endpos, out); ex'd^y
string& szData = oss.str(); LAwX9q`
`C=!8q
const char * cc = szData.c_str(); 3, ,Z
// cout << (long)szData << endl; \VHi
// cout << (long)oss.str().c_str() << endl; Vt
n$*ML
cout<< cc; TT.EQv5
wa<@bub
return 0; zq4,%$y8|
} m %ET!+
QlJCdCSy
注意以上代码中红色部分没有写成: {aGQ[MH\9
const char * cc = oss.str().c_str(); // error D: JGd$`
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 'QeqWn
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。