#include "stdafx.h" K\?]$dK5
\Y|*Nee}XP
#include <iostream> R^&q-M=O[
#include <fstream> *%FA:Y
#include <sstream> t0E 51Ic@
#include <iterator> !nf-}ze{
using namespace std; Ri7((x]H"
*C|
int main(int argc, char* argv[]) &(pjqV
{ [:EvTY
ifstream ifs("test.txt"); Sm{>rR
if(!ifs) 6;b9swmh
return false; Sus;(3EX
'Prxocxq
ostringstream oss; V|D]M{O
istream_iterator<char> inpos(ifs); 6sfwlT
istream_iterator<char> endpos; fz_nsVD
ostream_iterator<char> out(oss); $7Jo8^RE
std::copy(inpos, endpos, out); WgQBGch,!
string& szData = oss.str(); ~.g3ukt
{p<Zbm.
const char * cc = szData.c_str(); F\JUx L@8
// cout << (long)szData << endl; gXFWxT8S
// cout << (long)oss.str().c_str() << endl; io2)1cE&f
cout<< cc; \%jVg\4'
V4w=/e_
return 0; y(jg#7)
} vG41C k1
+K",^6%1
注意以上代码中红色部分没有写成: S_(d9GK<
const char * cc = oss.str().c_str(); // error 32)tJ|m
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 %q3$|>
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。