#include "stdafx.h" +*L<"@
BDfJ
#include <iostream> Ym|%ka
#include <fstream> E)F#Z=)
#include <sstream>
tg6iHFa
#include <iterator> /l>!7
using namespace std; 9oQ$w?=#$
PT39VI
=
int main(int argc, char* argv[]) Lq2ZgKd!
{ >0E3Em<(}l
ifstream ifs("test.txt"); *%CDQx0}
if(!ifs) &t:~e" 5<
return false; g1v=a
"DvhAEM
ostringstream oss; F4DJML-(
istream_iterator<char> inpos(ifs); ]8f$&gw&A
istream_iterator<char> endpos; ToR@XL!%rP
ostream_iterator<char> out(oss); "6q@}sz!
std::copy(inpos, endpos, out); \c4D|7\=
string& szData = oss.str(); 7Fzj&!>ti
\=uD)9V
const char * cc = szData.c_str(); .H
9r_
// cout << (long)szData << endl; zS*vKyye>
// cout << (long)oss.str().c_str() << endl; (lg~}Jwq
cout<< cc; k&lfxb9pd
d.$0X/0
return 0; Q8D#kAYw
} oy\U\#k
{PKf]m
注意以上代码中红色部分没有写成: rT_J6F5J
const char * cc = oss.str().c_str(); // error rT(b t~Z
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 yb6gYN
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。