#include "stdafx.h" $[0\Th
e(H{C
#include <iostream> X:m m<4
#include <fstream> 3R<VpN){
#include <sstream> PwnfXsR
#include <iterator> 4w#:?Y
_\[
using namespace std; 1Vx>\A
e/b
|
sl
int main(int argc, char* argv[]) vD76IG j m
{ 8lFYk`|g
ifstream ifs("test.txt"); 3w}ul~>j
if(!ifs)
G *
=>
return false; w* \JA+
2sYz$ZGC"#
ostringstream oss; :u`gjj$:s
istream_iterator<char> inpos(ifs); KM9H<;A
istream_iterator<char> endpos; nQ@<[KNd
ostream_iterator<char> out(oss); KEjMxOv1
std::copy(inpos, endpos, out); {]]#q0|
string& szData = oss.str(); PIHKSAnq
NtNCt;_R7
const char * cc = szData.c_str(); >Z>sR0s7
// cout << (long)szData << endl; xbzO'C
// cout << (long)oss.str().c_str() << endl; w ufQyT`
cout<< cc; S;j"@'gz9
49=L9:
return 0; Nz>xilU'
} vLpIVNA]]Y
J"K(nKXO_?
注意以上代码中红色部分没有写成: U>0bgL
const char * cc = oss.str().c_str(); // error y*!8[wASHq
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 l
p|`n
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。