#include "stdafx.h" /w]&t\]*
t ]c{c#N/
#include <iostream> ]WJfgN4
#include <fstream> IfDx@ ?OB
#include <sstream> .Qt4&B
#include <iterator> PiLJZBUv
using namespace std; 5/m$)wE
Uz%Z&K
int main(int argc, char* argv[]) $R8w+ Id
{ ZX
b}91rzt
ifstream ifs("test.txt"); -Uo?WXP]B'
if(!ifs) o@lWBfB*%e
return false; 5 waw`F
,]Zp+>{
ostringstream oss; }8'&r(cN4
istream_iterator<char> inpos(ifs); >+cVs:
istream_iterator<char> endpos; <Wl(9$
ostream_iterator<char> out(oss); ,/&Zw01dGN
std::copy(inpos, endpos, out); }tST)=M`
string& szData = oss.str(); %u p}p/?
;52'}%5
const char * cc = szData.c_str(); V'Qn sI
// cout << (long)szData << endl; km:nE: |
// cout << (long)oss.str().c_str() << endl; H L<s@kEZ
cout<< cc; i(2y:U3[@
Z\>, ),O
return 0; cJn HW
} 0)uYizJce
Y9 r3XhVI
注意以上代码中红色部分没有写成: }bB`(B,m
const char * cc = oss.str().c_str(); // error h3u1K>R)
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ]_*S~'x
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。