#include "stdafx.h" <"@5. f1"Y
^ pNA_s!S
#include <iostream> Ov@vNj&
#include <fstream> j_0xE;g"]
#include <sstream> yqKSaPRA
#include <iterator> $QnsP#ePN
using namespace std; 6 2LLfD
Vtv1{/@+c
int main(int argc, char* argv[]) 9dwLkr
{ .s%dP.P:i1
ifstream ifs("test.txt"); [e7nW9\l
if(!ifs) 8<=]4- X@
return false; IqCh4y3
~BC~^D&WD
ostringstream oss; $ qTv2)W1{
istream_iterator<char> inpos(ifs); A-l[f\
istream_iterator<char> endpos; `RyH~4\;
ostream_iterator<char> out(oss); "%ZAL\x
std::copy(inpos, endpos, out); MogIQ
string& szData = oss.str(); KtcuGI/A
@}ioK=A
const char * cc = szData.c_str(); b!T-{Ns6
// cout << (long)szData << endl; &*; Z(ul&9
// cout << (long)oss.str().c_str() << endl; S{nBQB<
cout<< cc; Qov*xRO6
4k)0OQeW6
return 0; %(B6eiA
} g(l:>=g]?
T U^s!Tj
注意以上代码中红色部分没有写成: P\%aJ'f~
const char * cc = oss.str().c_str(); // error ^!Tq(t5V
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 5l]qhi3f
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。