#include "stdafx.h" S&;)F|-q
!>&G+R+k
#include <iostream> ^x_.3E3Q
#include <fstream> Z&h :3;
#include <sstream> 6F%6]n
#include <iterator> $"#M:V@
using namespace std; OT"j V
B%o%%A8*g
int main(int argc, char* argv[]) ^PMA"!n8
{ >xH?`I7;f
ifstream ifs("test.txt"); 9<"F3F0|
if(!ifs) ^}:0\;|N
return false; ?q0a^c?A^
S'>KGdF
ostringstream oss; }"q#"s
istream_iterator<char> inpos(ifs); w2^s}NO
istream_iterator<char> endpos; dkg+_V!
ostream_iterator<char> out(oss); WMFn#.aY5
std::copy(inpos, endpos, out); .dvs&+I
string& szData = oss.str(); #kJ8 qN
'8I=Tn
const char * cc = szData.c_str(); [G[{?{
// cout << (long)szData << endl; e"Z,!Q^-L
// cout << (long)oss.str().c_str() << endl; -vt6n1A&b
cout<< cc; FE#|5;q.
9>_VU"T
return 0; ,3)JZM
} r 2{7h>
] HRHF'4
注意以上代码中红色部分没有写成: tao9icl*`
const char * cc = oss.str().c_str(); // error :MH=6
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 a&`^M
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。