#include "stdafx.h" y05(/NH>
\IY)2C<e
#include <iostream> ^G'8!!ys
#include <fstream> !fF1tW
#include <sstream> !`S?
#include <iterator> ")kE1D%
using namespace std; c"R`7P
3Gi#WV4$
int main(int argc, char* argv[]) Rb=T'x'
{ >-rDBk
;K
ifstream ifs("test.txt"); K FV&Dt}<
if(!ifs) SPKGbp&
return false; aWhhq@
=fa!"$J3
ostringstream oss; %lPAq
istream_iterator<char> inpos(ifs); bnBnE[y<'
istream_iterator<char> endpos; F
VW&&ft
ostream_iterator<char> out(oss); bTB/M=M
std::copy(inpos, endpos, out); j|3p.Cy
string& szData = oss.str(); -1t"(v
y
BF3Lms
const char * cc = szData.c_str(); 6wH]W+A
// cout << (long)szData << endl; UO^"<0u
// cout << (long)oss.str().c_str() << endl; HRO:U%
cout<< cc; [)U|HnAJ
],ioY*4G
return 0; V9Bi2\s*
} TJ9JIxnS
4UD7!
注意以上代码中红色部分没有写成: :-HVK^$%
const char * cc = oss.str().c_str(); // error 6QVdnXoG/
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 PR?Ls{}p\
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。