#include "stdafx.h" Bi3+)k>u7
q<#>HjC
#include <iostream> ?7MqeR4/E
#include <fstream> i/So6jW
#include <sstream> ]@^coj[
#include <iterator> Xz 4 x
using namespace std; Yw;D:Y(
5 BtX63
int main(int argc, char* argv[]) _-~`03 `!
{ Zm
ogM7B
ifstream ifs("test.txt"); BV`- =wRC
if(!ifs) a4i:|
return false; 5S{7En~zUE
X"fh@.
ostringstream oss; [&?8,Q(
istream_iterator<char> inpos(ifs); w$Ot{i|$(
istream_iterator<char> endpos; ,)!u)wz
ostream_iterator<char> out(oss); (Y%Q|u
std::copy(inpos, endpos, out); qT:zEt5
string& szData = oss.str(); \C^;k%{LV
ra N)8w}-
const char * cc = szData.c_str(); q my%J
// cout << (long)szData << endl; 1xE]6he4{T
// cout << (long)oss.str().c_str() << endl; Mg,:UC:
cout<< cc; dq1:s1
#-% A[7Cdp
return 0; JPn$FQD
} k>jbcSY(z<
_ee
dBpV
注意以上代码中红色部分没有写成: 7Q w|!
const char * cc = oss.str().c_str(); // error 4)>FS'=
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 BvrB:%_:
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。