#include "stdafx.h" @Eb2k!T
fA=#Fzk 2
#include <iostream> )XfzLF7
#include <fstream> HAYMX:%
#include <sstream> f""`cdqAOh
#include <iterator> ms_ VM>l
using namespace std; ]?h`:,]
[Px'\nVf
int main(int argc, char* argv[]) }P3tn
{ O,<IGO
ifstream ifs("test.txt"); O'GG Ti]e
if(!ifs) vfB2XVc
return false; {"vkji>
lc6iKFyG
ostringstream oss; !WkIi^T
istream_iterator<char> inpos(ifs); @h?shW=^
istream_iterator<char> endpos; &/A8-:m
ostream_iterator<char> out(oss); 1G7b%yPA
std::copy(inpos, endpos, out); < pTTo
string& szData = oss.str(); 3jogD
4Iq'/r
const char * cc = szData.c_str(); [0OJdY4
// cout << (long)szData << endl; 6r"u$i`o
// cout << (long)oss.str().c_str() << endl; h7X_S4p/Mg
cout<< cc; |xoF49
XCsiEKZ_i
return 0; (]*H[)F/
} q4UA]+-*
NA$zd(
注意以上代码中红色部分没有写成: 0lM{l?
const char * cc = oss.str().c_str(); // error jxgj,h"}9`
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 GFk1/ F
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。