#include "stdafx.h" #Jfmt~ks'
}5QUIK~NA
#include <iostream> \F7NuG:m,
#include <fstream> W:2j.K9!
#include <sstream> 1.a:iweN
#include <iterator> pJQ_G`E
using namespace std; ip*UujmNyR
cs]3Rp^g
int main(int argc, char* argv[]) :&s8G*
{ ]TsmW ob
ifstream ifs("test.txt"); 2]tW&y_i
if(!ifs) W{kTM4
return false; [Lf8*U"
1EliR uJ
ostringstream oss; y*I,i*iv
istream_iterator<char> inpos(ifs); : p7PiqQ
istream_iterator<char> endpos; z,SNJIsx
ostream_iterator<char> out(oss); F Zk[w>{
std::copy(inpos, endpos, out); 3X1
U
string& szData = oss.str(); h;J%Z!Rjw
w|ct="MG
const char * cc = szData.c_str(); <I2~>x5db
// cout << (long)szData << endl; v0%FG9Gk
// cout << (long)oss.str().c_str() << endl; 7+P-MT
cout<< cc; byIP]7Ld
{\
BFWGX
return 0; t
y%Hrw
} 7t6TB*H
H*&!$s.
注意以上代码中红色部分没有写成: LlbE]_Z!U%
const char * cc = oss.str().c_str(); // error VS5D)5w#
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 U
H6
Jvt
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。