#include "stdafx.h" l,fwF ua
c,>y1%V*S{
#include <iostream> 8*zORz
#include <fstream> fQm3D%
#include <sstream> /
R-1s
#include <iterator> &=f] a
using namespace std; ,FIG5-e,}
xAwP
int main(int argc, char* argv[]) af@R\"N9c
{ tJe5`L
ifstream ifs("test.txt"); -HwqR Ys
if(!ifs) y^0
mf|
return false; +MR]h
[
xig4H7V
ostringstream oss; 6;C2^J @
istream_iterator<char> inpos(ifs); N)X3pWC8
istream_iterator<char> endpos; o[I
s$j
ostream_iterator<char> out(oss); Six2{b)p
std::copy(inpos, endpos, out); xs
1V?0
string& szData = oss.str(); B_DyH
C\<
E]w2
{%
const char * cc = szData.c_str(); ?_-5W9
// cout << (long)szData << endl; sA~Ijg"6
// cout << (long)oss.str().c_str() << endl; r S>@>8k2,
cout<< cc; w`GjQIA
4Sz2
9\X
return 0; U|
T}0
} Sq]VtQ(
8q]_> X
注意以上代码中红色部分没有写成: ^*G
UcQ$
const char * cc = oss.str().c_str(); // error Prc(
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 5Vc~yMz
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。