#include "stdafx.h" `63?FzTy
8Gw0;Uu8D
#include <iostream> k1EAmA
l
#include <fstream> "CS{fyJ
#include <sstream> M*& tVG
#include <iterator> S6J7^'h
using namespace std; yUZ;keQ_Tw
!A5UT-
int main(int argc, char* argv[]) $U{\T4
{
]+ \]2`?
ifstream ifs("test.txt"); ?2;gmZd7
if(!ifs) i]qVT)j
return false; |C MKY
wZ^7#yX>
ostringstream oss; >9h@Dj[|!
istream_iterator<char> inpos(ifs); 8SG*7[T7
istream_iterator<char> endpos; 3,7SGt
r
ostream_iterator<char> out(oss); aN87 ^[
std::copy(inpos, endpos, out); K1vm
[Ne
string& szData = oss.str(); \P3[_kbf1
AbWnDqv
const char * cc = szData.c_str(); jK#[r[q{
// cout << (long)szData << endl; ;bC163[
// cout << (long)oss.str().c_str() << endl; 'CTvKW
cout<< cc; wEMh !jAbv
$#bgt
return 0; dHE\+{K%-
} LuLnmnmB
g?(h{r`
注意以上代码中红色部分没有写成: OZHQnvZ
const char * cc = oss.str().c_str(); // error c4T8eTKU
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 3C=|
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。