#include "stdafx.h" fOJ0#^Z
njeRzX
#include <iostream> )b`Xc+{>
#include <fstream> +PgUbr[p
#include <sstream> 0<_|K>5dS|
#include <iterator> $3<,"&;Ecs
using namespace std; 6w(Mb~[n
+KgoL a
int main(int argc, char* argv[]) ZUP\)[~
{ M #'br<]
ifstream ifs("test.txt"); x;)bp7
if(!ifs) KY34Sc
return false; ]E'BFon
XI:8_F;Q
ostringstream oss; pd{W(M78g
istream_iterator<char> inpos(ifs); K]ob>wPf
istream_iterator<char> endpos; nwswy]e8/
ostream_iterator<char> out(oss); +^ a9i5
std::copy(inpos, endpos, out); bP\0S@1YL
string& szData = oss.str(); A'r 3%mC
E9z^# @s
const char * cc = szData.c_str(); =y-L'z&r
// cout << (long)szData << endl; CF"$&+ s9
// cout << (long)oss.str().c_str() << endl; rCfr&>nn
cout<< cc; <6QG7i
uMVM- (g%
return 0; %|E'cdvkX
} _Z?{&k
@)PA9P |
注意以上代码中红色部分没有写成: 6(awO2{BP
const char * cc = oss.str().c_str(); // error N`XJA-DE
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 @Gp=9\L
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。