#include "stdafx.h" Q
S.w#"X[
FVHR
#include <iostream> llBW*4'
#include <fstream> z"@UNypc,
#include <sstream> 8nRxx`U\q
#include <iterator> QW@`4W0F
using namespace std; G?yG|5.pU
1FEY&rpR
int main(int argc, char* argv[]) s\1c.
{ N^tH&\G\m
ifstream ifs("test.txt"); -f[95Z3}
if(!ifs) M}F)
P&Y
return false; #>\8m+h 9
v/7iu*u
ostringstream oss; F,
p~O{
Q
istream_iterator<char> inpos(ifs); dr7ry"5Zq
istream_iterator<char> endpos; ApAHa]Ccp
ostream_iterator<char> out(oss); (=i+{
3`|
std::copy(inpos, endpos, out); DKf:0E8
string& szData = oss.str(); O>L
5
dP
#]o#~:S=
const char * cc = szData.c_str(); Jro%zZle
// cout << (long)szData << endl; v4x1=E
// cout << (long)oss.str().c_str() << endl; yB^_dE
cout<< cc; c3aF lxW
K0?:?>*b#
return 0; f9&po2Pzf
} |/35c0IM
{d,~=s0T
注意以上代码中红色部分没有写成: SA16Ng
const char * cc = oss.str().c_str(); // error uzUZuJ
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 &!FWo@
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。