#include "stdafx.h" eg[EFI.h
>M<3!?fW)
#include <iostream> v+ $3
#include <fstream> bWFa{W5!
#include <sstream> K@.5
#include <iterator> 8}QM~&&.
using namespace std; _>gz&
}x'*3zI
int main(int argc, char* argv[]) {*xE+ |
{ JE.$]){
ifstream ifs("test.txt"); N_Us6X
if(!ifs) j=sfE qN).
return false; .S` q2C\
yF)o_OA[uR
ostringstream oss; w{ja*F6
istream_iterator<char> inpos(ifs); [LVXXjkFI
istream_iterator<char> endpos; '6N)sqTR
ostream_iterator<char> out(oss); !6/UwPs
std::copy(inpos, endpos, out); pqG>|#RG
string& szData = oss.str(); tP'v;$)9F
v93b8/1
const char * cc = szData.c_str(); a%#UF@I
// cout << (long)szData << endl; vC]X>P5 Px
// cout << (long)oss.str().c_str() << endl; 5U84*RY
cout<< cc; W;u.@I&
. ,|C>^
return 0; N&8$tJ(hhx
} Ez1eGPVr
2Zu9?
L ,I
注意以上代码中红色部分没有写成: %.bDK}
const char * cc = oss.str().c_str(); // error 6[m~xegG
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 n_kwtWX(
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。