#include "stdafx.h" 3WVHI$A9
M;bQid@BG
#include <iostream> S {H8}m|MW
#include <fstream> w{qYP
#include <sstream> Vqr&)i"b$
#include <iterator> eyWwE%
using namespace std; DQ}]'*@?
]7O?c=
int main(int argc, char* argv[]) -|kDa1knA
{ YD%Kd&es
ifstream ifs("test.txt"); sig_2;
if(!ifs) 3N21[i2/m
return false; ;vx9xs?6
Cu:-<
ostringstream oss; h^)2:0#{I
istream_iterator<char> inpos(ifs); dd+).*
istream_iterator<char> endpos; StVv"YY
ostream_iterator<char> out(oss); b6(yyYdF
std::copy(inpos, endpos, out); BkF[nL*|
string& szData = oss.str(); :[&X*bw[
/_|1,x-Kx
const char * cc = szData.c_str(); ?~{xL"
// cout << (long)szData << endl; ^b#E%Rd
// cout << (long)oss.str().c_str() << endl; ]=3O,\
cout<< cc; J @fE")
V_QVLW
return 0; k|D!0^HE[
} VGq]id{*$
.wSAysiQ|P
注意以上代码中红色部分没有写成: v>5F[0gE
const char * cc = oss.str().c_str(); // error GXl?Zg
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [`lAc V<
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。