#include "stdafx.h" U Ox$Xwp5&
8>:kv:MId
#include <iostream> 89I[Dg;"u
#include <fstream> 9Fe(],AzF
#include <sstream> #z|\AmZ\
#include <iterator> ~[@Gj{6p0
using namespace std; bYr;~
^
e=11EmN9
int main(int argc, char* argv[]) ];bl;BP
{ Z[.+Wd\)-9
ifstream ifs("test.txt"); oB9t&yM
if(!ifs) d^"dL" Q6m
return false; #!IezvWf
_Qy3A T~
ostringstream oss; )ca^%(25!z
istream_iterator<char> inpos(ifs); @w1@|"6vF
istream_iterator<char> endpos; | v?
pS
ostream_iterator<char> out(oss); 9/lCW
std::copy(inpos, endpos, out); QjW7XVxB#N
string& szData = oss.str(); RU>Hr5ebo
p_!;N^y.
const char * cc = szData.c_str(); O<3i6
// cout << (long)szData << endl; zNE"5
// cout << (long)oss.str().c_str() << endl; ;().
cout<< cc; f%LzWXA
FHNK%Ko
return 0; zw{cli&S
} H].G%,2'
UcCkn7}
注意以上代码中红色部分没有写成: s*R\!L
const char * cc = oss.str().c_str(); // error JPS7L} Kv
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 0phO1h]2S)
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。