#include "stdafx.h" 1!zd#TX
F*G]Na@6D
#include <iostream> U9BhtmY
#include <fstream> %]F/!n
#include <sstream>
6(7
56
#include <iterator> J[}j8x?r
using namespace std; +_X*one
?jmL4V2-f
int main(int argc, char* argv[]) hvI#D>Z!Yp
{ mBL?2~M
ifstream ifs("test.txt"); g8/ ,E-u
if(!ifs) PC5$TJnj3
return false; }#<Rs
SOPair <r
ostringstream oss; hcW>R
istream_iterator<char> inpos(ifs); $mT)<N ;w
istream_iterator<char> endpos; `j{q
ostream_iterator<char> out(oss); eS Z':p
std::copy(inpos, endpos, out); zn/>t-Bc
string& szData = oss.str(); ,OrrGwp&
TQ![
const char * cc = szData.c_str(); Lt~&K$t7~
// cout << (long)szData << endl; #)L}{mHLM-
// cout << (long)oss.str().c_str() << endl; E\}A<r
cout<< cc; _*z^PkH
OeGLMDw
return 0; \hBzQ%0
} y.(<
P\@kqf~pC
注意以上代码中红色部分没有写成: uNEl]Q]<e]
const char * cc = oss.str().c_str(); // error mY=sh{ir
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 *|q{(KX
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。