#include "stdafx.h" GGJ_,S*
'')G6-c/
#include <iostream> z7<^aS
#include <fstream> N->;q^
#include <sstream> 2CmeO&(Qf*
#include <iterator> <ht>>
using namespace std; Phb<##OB
T&R`s+7
int main(int argc, char* argv[]) n|,Es!8:o
{ XX6&%7(
ifstream ifs("test.txt"); #m$H'O[WG\
if(!ifs) xje{kx#
return false; yLDHJ}R
,7j`5iq[m
ostringstream oss; fx;5j;
istream_iterator<char> inpos(ifs); r#Pd@SV
istream_iterator<char> endpos; ..~{cU4Tt
ostream_iterator<char> out(oss); z?
{#/
std::copy(inpos, endpos, out); z9D2,N.
string& szData = oss.str(); (XW#,=rYk
spl*[ d
const char * cc = szData.c_str(); 9&d BL0
// cout << (long)szData << endl; |HG%o
3E]
// cout << (long)oss.str().c_str() << endl; qS2%U?S7
cout<< cc; ux=a9
yBl<E$=
return 0; 8vT:icl
} 2sU"p5 j
}s)Z:6;(,q
注意以上代码中红色部分没有写成: 92SB'T>
const char * cc = oss.str().c_str(); // error ;JZXSM-3
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 9723f1&Vd
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。