#include "stdafx.h" o?/fObV@(
"R^0eNv$
#include <iostream> S!8q>d,%L
#include <fstream> _<u>?
Qt
#include <sstream> ]N{jF$
#include <iterator> z8<"
using namespace std; irF+(&q]jh
FZ5
Ad&".@
int main(int argc, char* argv[]) ~n;U5hcB
{ O"9Or3w
ifstream ifs("test.txt"); Bmv5yc+;
if(!ifs) |h-e+Wh1
return false; @ +yjt'B
8fA8@O}
ostringstream oss; @Px_\w
istream_iterator<char> inpos(ifs);
:X 9_~
istream_iterator<char> endpos; [sZ,nB/
ostream_iterator<char> out(oss); 1s-=zs
std::copy(inpos, endpos, out); "Bl6)qw
string& szData = oss.str(); =3|5=ZU034
hH_\C.bL
const char * cc = szData.c_str(); K'oy6$B
// cout << (long)szData << endl; nG~^-c+
// cout << (long)oss.str().c_str() << endl; nK6(0?/
cout<< cc; /)<Xoa
~(}nd
return 0; G]T&{3g-.
} +Uxtxl'
IHwoG(A~<
注意以上代码中红色部分没有写成: B8>3GZi
const char * cc = oss.str().c_str(); // error jE!?;} P1
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ZVDi;
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。