#include "stdafx.h" I}$`gUXX8x
U~G7~L &m
#include <iostream> <JPN<
Kv
#include <fstream> i4D(8;
#include <sstream> bpu`'Vx
#include <iterator> Iu'9yb
using namespace std; <,vIN,Kl8/
PgtLyzc
int main(int argc, char* argv[]) Ku5||u.F4*
{ X'A`"}=_
ifstream ifs("test.txt"); Bwg(f_[1
if(!ifs) uHbg&eW
return false; v>X!/if<y
EEe$A?a;
ostringstream oss; ]3r}>/2(
istream_iterator<char> inpos(ifs); Upz)iOqLi
istream_iterator<char> endpos; y4\X~5kU
ostream_iterator<char> out(oss); Y;w|Fvjj+
std::copy(inpos, endpos, out); 44CZl{pt
string& szData = oss.str(); oZ{,IZ45
HG"ZN)~
const char * cc = szData.c_str(); oXo>pl
// cout << (long)szData << endl; ~DH9iB
// cout << (long)oss.str().c_str() << endl; J,$xQ?,wE
cout<< cc; .jRI
$vm
Y1r$;;sH
return 0; R~<N*En~
} g-3^</_fZ
+'F;\E
注意以上代码中红色部分没有写成: y_PA9#v7
const char * cc = oss.str().c_str(); // error #N{]
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 A%w9Da?B
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。