#include "stdafx.h" *QC6zJ
E2e"A
I.h
#include <iostream> 4>gfLK\R:
#include <fstream> 1b5Z^a<u
#include <sstream> &tyS 6S+
#include <iterator> 3<xE_ \DR
using namespace std; BhJ>G%
B"^j>SF
int main(int argc, char* argv[]) p _gN}v
{ _{*} )&!M
ifstream ifs("test.txt");
0,Ds1y^
if(!ifs) bfxE}>
return false; 5nG\J
g7
"Lp.*o
ostringstream oss; wLV,E,gM
istream_iterator<char> inpos(ifs); ng1E'c]0@
istream_iterator<char> endpos; k<9,Ypa
ostream_iterator<char> out(oss); iQG!-.aX
std::copy(inpos, endpos, out); tr0b#4
string& szData = oss.str(); H,7='n7"
"#d$$ 8
const char * cc = szData.c_str(); P3oYk_oW
// cout << (long)szData << endl; &[ })FI
// cout << (long)oss.str().c_str() << endl; D;,p?]mgO~
cout<< cc; L!Jx`zM^
jD
S?p)&
return 0; e={O&9Z
} [OC(~b
f1'ByV'2
注意以上代码中红色部分没有写成: CmU@8-1
const char * cc = oss.str().c_str(); // error 6#Vl3o(E|
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 /`PYk]mJh
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。