#include "stdafx.h" eyeNrk*2o
8K\'Z
#include <iostream> tZaD ${
#include <fstream> { OB-J\7Y
#include <sstream> +}_Pf{MW
#include <iterator> ,vPe}OKj
using namespace std; m:)Z6
4%g6_KB
int main(int argc, char* argv[]) P%zH>K
{ _0'm4?"
ifstream ifs("test.txt"); {&2$[g=[ ^
if(!ifs) uY^v"cw/F
return false; _:35d1[
B{7Kzwh;
ostringstream oss; 1. #
|QX
istream_iterator<char> inpos(ifs); x9 &-(kBU
istream_iterator<char> endpos; ]\CU9J|H8
ostream_iterator<char> out(oss); T4OguP=
std::copy(inpos, endpos, out); )Y3EQxXa
string& szData = oss.str(); ([:]T$0 #
t"<s} ~
const char * cc = szData.c_str(); I
jZ]_*^!
// cout << (long)szData << endl; Yim{U:F
// cout << (long)oss.str().c_str() << endl; J=I:T2bV&s
cout<< cc; WnD^F>
.6> hD1'
return 0; 3B@y &a#&
} XB0a dp
&|v{#,ymeb
注意以上代码中红色部分没有写成: h ?uqLsRl
const char * cc = oss.str().c_str(); // error 06 QU
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 5Z/yhF.{
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。