#include "stdafx.h" PkI:*\R
)K &(
#include <iostream> %v20~xW:o
#include <fstream> 9z6XF]A
#include <sstream> y;/VB,4V
#include <iterator> Zd"^</ S
using namespace std; :
]C~gc
RKPO#qju\F
int main(int argc, char* argv[]) Ua!aaq&
{ boDt`2=
ifstream ifs("test.txt"); %^RN#_ro(3
if(!ifs) ]_N|L|]M
return false; ER,1(1]N
vWAL^?HUP
ostringstream oss; I`NjqyTW
istream_iterator<char> inpos(ifs); #g6.Glz3
istream_iterator<char> endpos; U&O:
_>~
ostream_iterator<char> out(oss); e7wSOs
std::copy(inpos, endpos, out); P.gb1$7<
string& szData = oss.str(); '7O3/GDK
Gea\,{E9xA
const char * cc = szData.c_str(); '],J$ge
// cout << (long)szData << endl; @S|XGf
// cout << (long)oss.str().c_str() << endl; 1GzAG;UUo6
cout<< cc; y5!KX AQ%
a+n0|CvF
return 0; T=ev[ mS
} x7O-Y~[2
2}8v(%s p
注意以上代码中红色部分没有写成: GSH>7!.#
const char * cc = oss.str().c_str(); // error SL5Ai/X0N
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 X&kp;W
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。