#include "stdafx.h" WzlC*iv
6 hiC?2b{x
#include <iostream> 9UD
@MA
#include <fstream> u%2KwRQ
#include <sstream> BHr|.9g]%%
#include <iterator> $YM_G=k
using namespace std; lG"H4Aa>
Kf.T\V4%
int main(int argc, char* argv[]) R$6qoqv{yG
{
=r6qX
ifstream ifs("test.txt"); s<7XxQ
if(!ifs) %Fft
R1"
return false; _T*AC.
[m2+9MMl
ostringstream oss; o4Q3<T7nI
istream_iterator<char> inpos(ifs); oH-8r:{
istream_iterator<char> endpos; 9l
!S9d
ostream_iterator<char> out(oss); C}"@RHEu
std::copy(inpos, endpos, out); ?<~WO?
string& szData = oss.str(); MCnN^
p^X^1X7
const char * cc = szData.c_str(); =NDOS{($
// cout << (long)szData << endl; pP.'wSj
// cout << (long)oss.str().c_str() << endl; REA;x-u*
cout<< cc; 4v.d-^
3 ^}A %-bS
return 0; Ai kf|)D[
} wda';@y5(
-dRFA2Y
注意以上代码中红色部分没有写成: M-MKk:o
const char * cc = oss.str().c_str(); // error A3R#z]Ub
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 J^zi2jtV
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。