#include "stdafx.h" <M?#3&5A
{\/nUbo[
#include <iostream> \,gZNe&Vv
#include <fstream> -!>ZATL<B
#include <sstream> bMZn7c
#include <iterator> +fQL~0tA
using namespace std; u^$Md WP
i{ @'\}{L
int main(int argc, char* argv[]) +i#sS19h
{ /7@2Qc2
ifstream ifs("test.txt"); 8ysK VF
if(!ifs) eJGos!>*
return false; VQ<i$ I
TDE1z>h+"
ostringstream oss; X&?lDL7?
istream_iterator<char> inpos(ifs); 6xIYg ^
istream_iterator<char> endpos; _`{{39 F
ostream_iterator<char> out(oss); 5b`xN!c
std::copy(inpos, endpos, out); %Dls36F
string& szData = oss.str(); 2 `h!:0
B;]5,`#!
const char * cc = szData.c_str(); #Rx"L&3Ue
// cout << (long)szData << endl; wLN2`ucC
// cout << (long)oss.str().c_str() << endl; ZV]e-
cout<< cc; @1&;R
Fg\| e%
return 0; \e8*vos
} s]vJUC,s
Gi2ad+QH-
注意以上代码中红色部分没有写成: H\+c'$
const char * cc = oss.str().c_str(); // error \seG2vw$
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Rfc&OV
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。