#include "stdafx.h" e]8,:Gd(
rRFAD{5)
#include <iostream> ){;02^tX
#include <fstream> kL*0M<0 (
#include <sstream> qdD)e$XW,
#include <iterator> N@T.T=r
using namespace std; 9WG{p[
vIGw6BJI
int main(int argc, char* argv[]) T]9\VW4
{ pbXi9|bI
ifstream ifs("test.txt"); aptY6lGv-|
if(!ifs) tOl e>]
return false; K95;rd
%3Z/+uT@v]
ostringstream oss; kSncZ0K{
istream_iterator<char> inpos(ifs); j Ch=@<9
istream_iterator<char> endpos; 0ezYd S~o
ostream_iterator<char> out(oss); {Tp2H_EG
std::copy(inpos, endpos, out); 6=GZLpv
string& szData = oss.str(); YUWn;#
W&Y"K)`
const char * cc = szData.c_str(); VyLH"cCv
// cout << (long)szData << endl; eDKxn8+(H
// cout << (long)oss.str().c_str() << endl; [#^#+ |{\
cout<< cc; KFRw67^
`|Z}2vo;j
return 0; ,T,:-E
} <[ Xw)/#
A#wEuX=[
注意以上代码中红色部分没有写成: I3b"|%
const char * cc = oss.str().c_str(); // error 3INI?y}t
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 mB'3N;~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。