#include "stdafx.h" wMGk!N
mw_ E&v
#include <iostream>
Mtm/}I
#include <fstream> pe9@N9_5
#include <sstream> d')-7C
#include <iterator> sONBQ9
using namespace std; o/C(4q6d
wu A^'T
int main(int argc, char* argv[]) )l_@t(_
{ $f#agq_
ifstream ifs("test.txt"); S='
wJ@?;
if(!ifs) Ht#@'x
return false; Cezh l
PocYFhWQ`
ostringstream oss; qD#VbvRc9+
istream_iterator<char> inpos(ifs); syv$XeG=}
istream_iterator<char> endpos; x[QZ@rGIW
ostream_iterator<char> out(oss); 9M_(He
-
std::copy(inpos, endpos, out); ,|+Gls
string& szData = oss.str(); vv6?V#{
j Fma|y
const char * cc = szData.c_str(); petW
M@
// cout << (long)szData << endl; n"6;\
// cout << (long)oss.str().c_str() << endl; 2#3^skj
cout<< cc; [8"oj hdV
#Z\O}<
return 0; Cp#)wxi6[y
} FXV`9uq}Z
$J.T$0pFa
注意以上代码中红色部分没有写成: k@V#HC{t
const char * cc = oss.str().c_str(); // error ,_D"?o
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 h>alGLN>
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。