#include "stdafx.h" 9 8"/]ERJ
0{0BL@H
#include <iostream> ^6c=[N$aW
#include <fstream> Pi7IBz
#include <sstream> bvpP/LeY
#include <iterator> G3r9@2OC
using namespace std; 0 1~&H8 =
&T"X
kgU5
int main(int argc, char* argv[]) x|3f$
=b
{ y<#?z 8P
ifstream ifs("test.txt"); #RIo63
if(!ifs) n\CQ-*;l
return false; 6<E4?<O%
0uZ 'j
ostringstream oss; --X1oC52A
istream_iterator<char> inpos(ifs); ^
hoz<Ns
istream_iterator<char> endpos; F^knlv'
ostream_iterator<char> out(oss); kWkAfzf4a
std::copy(inpos, endpos, out); YTWlR]Tr6?
string& szData = oss.str(); ~x}/>-d
>'\cNM~nf
const char * cc = szData.c_str(); &tKr
?l
// cout << (long)szData << endl; WcE{1&PXx
// cout << (long)oss.str().c_str() << endl; ? dD<KCbP,
cout<< cc; 5yC$G{yV
HZ>8@AVa\
return 0; (+_i^SqK
} ah1DuTT/G
UBN^dbP*
注意以上代码中红色部分没有写成: ~i3/Ec0\
const char * cc = oss.str().c_str(); // error ze5Hg'f
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ?uiQ'}
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。