#include "stdafx.h" J1I ;Jgql(
c[4i9I3v
#include <iostream> `e|0g"oP
#include <fstream> v|%Z+w
#include <sstream> !1DKLQ
#include <iterator> b TM{l.Aq3
using namespace std; %GA"GYL9'
evAMJ=
int main(int argc, char* argv[]) pU%n]]qF
{ #W'HR
ifstream ifs("test.txt"); >
BY&,4r
if(!ifs) wq(7|!Eix
return false; Z/0fXn})
(SDr!!V<
ostringstream oss; uU <=d
istream_iterator<char> inpos(ifs); _c*=4y
istream_iterator<char> endpos; s{S4J'VW
ostream_iterator<char> out(oss); M&@b><B
std::copy(inpos, endpos, out); X>(TrdK_9"
string& szData = oss.str(); ~yfNxH~k
n}_JB>i~
const char * cc = szData.c_str(); ?Exv|e
// cout << (long)szData << endl; B~JwHwIhA
// cout << (long)oss.str().c_str() << endl; qx8fRIK%
cout<< cc; o+QE8H43
f]|ysf
return 0; YY)s p%
} S=<}:#;u0
1#*a:F&re
注意以上代码中红色部分没有写成: M/ni6%x
const char * cc = oss.str().c_str(); // error Jz.NHiLct1
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 v~V5`%
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。