#include "stdafx.h" FH*RU1Z
2xTT)9Tq*
#include <iostream> .pvxh|V
#include <fstream> 2Va4i7"X\
#include <sstream> nwf7M#3d
#include <iterator> RrWNJ&o
using namespace std; C) .2gQ
G
=M<z8R
int main(int argc, char* argv[]) Of`c`-<j
{ l!IGc:
ifstream ifs("test.txt"); gX,9Gh
if(!ifs) uvB1VV4
return false; #C\4/g?=,
4*M@]J "
ostringstream oss; DB@EVH
istream_iterator<char> inpos(ifs); 4;*f1_;f~
istream_iterator<char> endpos; &71e5<(dG
ostream_iterator<char> out(oss); B*,?C]0{
std::copy(inpos, endpos, out); 8#59iQl
string& szData = oss.str(); 1q]c7"
3k'.(P|F
const char * cc = szData.c_str(); aws"3O%
uW
// cout << (long)szData << endl; zj%cQkZ
// cout << (long)oss.str().c_str() << endl; (
v@jc8y
cout<< cc; .mPg0
jvs[ /
return 0; ~m`!;rE
} inF6M8
A1
jO)&KEh
注意以上代码中红色部分没有写成: >;nS8{2o
const char * cc = oss.str().c_str(); // error HomN/wKh
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 2c:f<>r0y
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。