#include "stdafx.h" >wb*kyO7(#
pX3E l$p
#include <iostream> _C1u}1hW#
#include <fstream> E=S_1
#include <sstream> +/n]9l]#h
#include <iterator> rGt]YG#C
using namespace std; -:L7iOzgD
:4X,5X7tW=
int main(int argc, char* argv[]) 5oYeUy>N
{ 9"1=um=
ifstream ifs("test.txt"); i>G:*?a
if(!ifs) iH]0
YT.E
return false; \!uf*=d
yJqDB$0
ostringstream oss; GpO@1 C/
istream_iterator<char> inpos(ifs); Ue,eEer
istream_iterator<char> endpos; s:,fXg25J
ostream_iterator<char> out(oss); d3T7$'l$
std::copy(inpos, endpos, out); rc%*g3ryLG
string& szData = oss.str(); Ssa/;O2
M_75bU
const char * cc = szData.c_str(); C5Fq%y{$.
// cout << (long)szData << endl; 6~s{HI!
// cout << (long)oss.str().c_str() << endl; B@ \0b|
cout<< cc; -ECnX/ "
b^8"EBo
return 0; {"|GV~
} YWi Y[
Pj8Vl)8~NV
注意以上代码中红色部分没有写成: >i61+uzEd+
const char * cc = oss.str().c_str(); // error T%}x%9VO7
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 {Y]3t9!\
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。