#include "stdafx.h" & .#0jb1r
2`lit@u&u
#include <iostream> Zj},VB*T
#include <fstream> "16==tLFE
#include <sstream> sz)3
z
#include <iterator> F;z FKvn
using namespace std; D~1nh%x_
;Y~;G7
int main(int argc, char* argv[]) 2D-*Z=5^
{ 0]WM:6 h
ifstream ifs("test.txt"); R#r?<Ofw4
if(!ifs) /,;9hx
return false; Bf7RW[ -v
/yI~(8bO
ostringstream oss; k_^d7yH
istream_iterator<char> inpos(ifs); MTF:mLJ
istream_iterator<char> endpos; 2x{3' ^+l
ostream_iterator<char> out(oss); >g F
std::copy(inpos, endpos, out); $EtZ5?qS
string& szData = oss.str(); fkx
9I m4
2L,e\]2Z
const char * cc = szData.c_str(); Z|7Y1W[
// cout << (long)szData << endl; "+rX*~
// cout << (long)oss.str().c_str() << endl; Vb1@JC9b
cout<< cc; X&McNO6"
sQ`8L+oY
return 0; / '7WL[<
} Ek4aC3
o30PI
注意以上代码中红色部分没有写成: wPW9 bu
const char * cc = oss.str().c_str(); // error 1.';:/~(
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ck Tnb
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。